无法使用python selenium在文本框中键入

Can not type in a text box using python selenium

本文关键字:文本 selenium python      更新时间:2023-09-26

我正在尝试使用python-selenium向以下文本区域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来自谷歌关键词策划器。感谢

您可以使用预期条件等待文本框可见性

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

编辑

您需要切换到带有文本区域的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()

问题可能不在于selenium代码,而在于使用该工具的工作流程。我不熟悉这个广告词关键词规划器,但当我在谷歌上搜索该文本区域的id和selenium时,我发现了一些github代码,看起来它首先启用了文本区域:

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)

在发送文本之前,尝试使用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';")

如果发生任何异常,请告诉我

更新

如果您想使用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';")