2016-03-26 10 views
0

Ich versuche Schlüssel für das folgende Textfeld HTML mit Python Selen zu senden:Kann nicht geben Sie ein Textfeld mit Python Selen in

<div class="spk-c spH-d"><div id="gwt-uid-23" class="sppb-a"> 
<div class="sppb-b spk-b">For example, flowers or used cars</div> 
<textarea rows="2" aria-labelledby="gwt-uid-64 gwt-uid-23" id="gwt-debug-keywords-text-area" class="spk-a sppb-c"> 
</textarea> 
</div> 
<div role="alert" class="error" style="display:none"> Input contains a keyword that is too long. </div> <div class="error" style="display:none">Your product or service description can't exceed 1,000 words. Remove some words and try again. 
</div> 
</div> 

und ich diesen Fehler:

selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with 
Stacktrace: 

hier ist mein Code:

textarea='textarea[id="gwt-debug-keywords-text-area"]' 
element = WebDriverWait(driver, 15).until(lambda driver : driver.find_element_by_css_selector(textarea)) 
driver.find_element_by_css_selector(textarea).send_keys('plumbers') 

Können Sie mir bitte helfen? Es nervt mich seit einer Weile. Der HTML-Code stammt vom Google-Keyword-Planer. Danke

Antwort

0

Try JS Code zu verwenden Element sichtbar vor dem Versenden Text zu machen:

driver.execute_script("document.getElementById('gwt-debug-keywords-text-area').style.visibility = 'visible';") 
driver.execute_script("document.getElementById('gwt-debug-keywords-text-area').style.display='bloc‌​k';") 

Lassen Sie mich wissen, ob irgendwelche Ausnahmen auftritt

UPDATE

Wenn Sie Text senden möchten Textbereich mit JS Sie müssen möglicherweise folgende ausführen:

driver.execute_script("document.getElementById('gwt-debug-keywords-text-area').innerHTML='Here is some text';") 

oder

driver.execute_script("document.getElementById('gwt-debug-keywords-text-area').value='Here is some text';") 
+0

I habe gerade deine Methode vor driver.find_element_by_css_selector (textarea) .send_keys ('plumbers') und immer noch die selbe Fehlermeldung ausprobiert: Element ist momentan nicht sichtbar und kann daher nicht interagiert werden. Vielleicht Javascript verwenden, um die Änderung der Textarea eingereicht Wert zu ändern? Ich habe viele Methoden ausprobiert, aber keine scheint zu funktionieren. –

+0

Haben Sie Ihren Code versucht ... Es gibt keine Fehler, aber es werden keine Schlüssel gesendet, das Textfeld bleibt leer. –

0

können Sie Bedingungen für das Textfeld Sichtbarkeit

WebDriverWait(driver, 15).until(expected_conditions.visibility_of_element_located((By.ID, 'gwt-debug-keywords-text-area'))).send_keys('plumbers') 

Edit

Sie müssen die iframe mit dem Text, um mit ihr zu interagieren wechseln warten zu erwarten

# by the frame id attribute 
driver.switch_to.frame(id) 

# by the frame name attribute 
driver.switch_to.frame(name) 

# by the frame webelement 
frame = drive.find_element(...) # locate the frame 
driver.switch_to.frame(frame) 

und zurück

driver.switch_to.default_content() 
+0

Ich erhalte eine Fehlermeldung NameError: Name 'By' ist nicht definiert beim Versuch Ihre Methode. –

+0

@RobertWest Sie müssen es importieren 'aus selen.webdriver.common.import By' und erwarteten Bedingungen' aus selen.webdriver.support import expected_conditions' – Guy

+0

ok ... jetzt habe ich einen anderen Fehler: AttributeError: 'Sichtbarkeit_von_element_located' Objekt hat kein Attribut 'send_keys' –

0

Das Problem möglicherweise nicht mit Ihrem Selencode, aber der Workflow für die Verwendung des Tools. Ich bin nicht mit diesem adwords Stichwort Planer vertraut, aber wenn ich eine Google-Suche für die ID des Textbereich und Selen tat, stieß ich auf einige github code, die aussieht wie es den Textbereich ermöglicht zuerst:

browser.find_element_by_id("gwt-debug-splash-panel-find-keywords-selection-input").click() 
browser.find_element_by_xpath("//textarea[@id='gwt-debug-keywords-text-area']").send_keys(keyword) 
+0

Ich habe auch Ihre Lösung versucht. Jedes Mal, wenn ich versuche, dieses Textfeld selbst mit xpath- oder css-Selektoren oder einfach mit id zu markieren, bekomme ich den gleichen Fehler. Ich kann das nicht herausfinden. –

Verwandte Themen