2016-03-26 2 views
0

Я пытаюсь отправить ключи к следующему TEXTAREA HTML с помощью питона селеном:Не удается ввести в текстовое поле с помощью питона селеном

<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> 

и я получаю эту ошибку:

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

здесь является мой код:

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') 

Не могли бы вы помочь мне? Меня это раздражало. Html - из планировщика ключевых слов Google. Спасибо

ответ

0

Попробуйте использовать JS код, чтобы сделать элемент видимым перед тем представляемого текста:

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';") 

Позволь мне знать, если происходят какие-либо исключения

UPDATE

Если вы хотите отправить текст текстовой области с использованием JS может потребоваться выполнить следующее:

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

или

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

I просто попробовал свой метод перед driver.find_element_by_css_selector (textarea) .send_keys ('plumbers') и по-прежнему та же ошибка. Сообщение: Элемент в настоящее время не виден и поэтому не может взаимодействовать. Может быть, используя javascript, чтобы изменить изменение в текстовом поле? Я пробовал много методов, которые, похоже, не работают. –

+0

Просто попробовал свой код ... ошибок нет, но он не посылает никаких ключей, текстовое поле остается пустым. –

0

Вы можете использовать ожидаемые условия ждать видимостей текстового поля

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

Edit

Вы должны переключиться на iframe с текстовым полем, чтобы взаимодействовать с ним

# 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) 

И переключиться обратно

driver.switch_to.default_content() 
+0

Я получаю сообщение об ошибке NameError: name 'By' не определен, попробовав свой метод. –

+0

@RobertWest Вам необходимо импортировать его 'from selenium.webdriver.common.by import By' и ожидаемые условия' from selenium.webdriver.support import expected_conditions' – Guy

+0

ok ... теперь у меня есть еще одна ошибка: AttributeError: объект 'visibility_of_element_located' не имеет атрибута 'send_keys' –

0

Проблема не может быть с кодом селеном, но рабочий процесс с помощью инструмента. Я не знаком с этим ключевым словом AdWords планировщика, но когда я сделал поиск Google для идентификатора этой области текста и селена, я наткнулся на какое-то github code, который выглядит, как он первый позволяет текстовую области:

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

Я попробовал и ваше решение. Каждый раз, когда я пытаюсь выбрать этот textarea даже с селекторами xpath или css или просто по id ..., я получаю ту же ошибку. Не могу понять это. –

Смежные вопросы