我正在尝试使用 selenium 在文本区域中输入一些文本。
源代码的检查揭示了有关文本区域代码的以下内容。我的文本应输入到“文本位于此处”的位置:
<iframe id="tinymcewindow_ifr" frameborder="2" src="javascript:""" allowtransparency="true" title="Rich Text AreaPress ALT-F12 for toolbar. Press ALT-0 for help" style="width: 90%; height: 90px; display: block;">
#document
<!DOCTYPE >
<html>
<head xmlns="http://www.site.org/xhtml"> … </head>
<body id="tinymce" class="mceContentBody " contenteditable="true" onload="window.parent.tinyMCE.get('tinymcewindow').onLoad.dispatch();" spellcheck="false" dir="ltr">
<p> … </p>
</body>
</html>
</iframe>
当我尝试使用如下命令选择文本区域时:
driver.find_element_by_name("tinymce")
它返回这样的错误信息;
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 293, in find_element_by_name
return self.find_element(by=By.NAME, value=name)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 681, in find_element
{'using': by, 'value': value})['value']
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 164, in execute
...
命令:
driver.find_element_by_id("tinymce")
给出这个错误信息:
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 197, in find_element_by_id
return self.find_element(by=By.ID, value=id_)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 681, in find_element
{'using': by, 'value': value})['value']
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 164, in execute
...
如何使用 Selenium 选择这样的文本框?
最佳答案
尝试
driver.find_element_by_id("tinymce")
HTML Forms 中的元素具有 name 属性,这就是您尝试与 find_element_by_name
匹配的内容。
如果你有这样的表格
<form>
First name: <input type="text" name="firstname"><br>
Last name: <input type="text" name="lastname">
</form>
您可以将输入的名字与 find_element_by_name('firstname')
匹配,但这不是您现在想要做的。
你要选择的元素看起来像这样
<body id="tinymce" class="mceContentBody " contenteditable="true" onload="window.parent.tinyMCE.get('tinymcewindow').onLoad.dispatch();" spellcheck="false" dir="ltr">
所以你可以
find_element_by_id("tinymce")
find_element_by_css_selector("#tinymce")
find_element_by_xpath("//*[@id='tinymce']")
- ...
...为了完整起见...
一旦你选择了这个元素,你可以填充它
driver.find_element_by_id("tinymce").send_keys("Hello world")
编辑:
有时人们没有意识到选择元素是在当前页面的上下文中起作用的。如果您的内容在 iframe 中,您需要先切换到此 iframe。
driver.switch_to_frame("frameName")
然后你可以返回 driver.switch_to_default_content()
关于python,选择一个带有 Selenium 的文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20318001/