无法使用python selenium在文本框中键入
Can not type in a text box using python selenium
我正在尝试使用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='block';")
如果发生任何异常,请告诉我
更新
如果您想使用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';")
相关文章:
- Selenium认为文本框是隐藏的,即使我可以在浏览器中看到它
- 使用 Selenium 在 IE9 浏览器中查找 PDF 文本
- 如何使用Java在Selenium WebDriver的隐藏字段中键入一些文本
- 元素找不到带有文本的selenium Web驱动程序
- 无法使用Javascript和Selenium Web驱动程序保存保存在表单元格中的文本
- 无法使用python selenium在文本框中键入
- Python selenium Webdriver - 文本框和按钮不起作用
- Selenium C# 如何在 IWEbElement 中获取文本
- 使用 Selenium WebDriver 和 JavaScript 从 XPath 定位的 Element 获取文本
- 如何使用c#在selenium webdriver ie中实现网页中的查找文本
- Selenium IDE在字符串文本中提供了SyntaxError:JSON.parse:错误的控制字符
- 使用带有selenium的xpath选择元素的文本
- 如何在Selenium中获取JS生成的文本
- Selenium:帮助将文本发送到浮动标头中的字段
- Selenium RC (Python)只将文本发送到页面上的一个定时控件
- Selenium使用Xpath读取隐藏web元素的文本
- 如何使用Selenium IDE存储和键入显示文本的最后一个单词
- 使用Python和Selenium抓取Javascript文本
- 如何使用Selenium从一个没有文本的Javascript表单中单击Onclick
- 使用JSE (Selenium c#)设置值和文本之间的区别