python,选择一个带有 Selenium 的文本框

标签 python selenium

我正在尝试使用 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">

所以你可以

  1. find_element_by_id("tinymce")
  2. find_element_by_css_selector("#tinymce")
  3. find_element_by_xpath("//*[@id='tinymce']")
  4. ...

...为了完整起见...

一旦你选择了这个元素,你可以填充它

driver.find_element_by_id("tinymce").send_keys("Hello world")

编辑:

有时人们没有意识到选择元素是在当前页面的上下文中起作用的。如果您的内容在 iframe 中,您需要先切换到此 iframe。

driver.switch_to_frame("frameName")

然后你可以返回 driver.switch_to_default_content()

参见 Selenium Python - Navigating

关于python,选择一个带有 Selenium 的文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20318001/

相关文章:

python - 调度程序关闭流警告

python - 如何确定 N 个 bool Pandas 列的逻辑真值?

python - 使用空白电子邮件添加多个 Django 用户

selenium - 方法executeScript(selenium web driver)不能定义全局变量供以后使用?

python-3.x - 使用 selenium 时禁用 Safari 中的自动化警告

python - 从 HTML 链接中提取 URL 的正则表达式

python - 为什么导入 Mechanize 会破坏我的 aws ec2 Elastic Beanstalk flask "hello world"python 应用程序?

testing - 驱动多个相互交互的浏览器

selenium - 等待特定条件时通过WebDriver刷新网页

python - 如何用selenium同时打开多个chrome配置文件?