【问题标题】:Selenium through Python won't fill a field通过 Python 的 Selenium 不会填充字段
【发布时间】:2016-06-06 01:29:35
【问题描述】:

我一直在尝试通过 Python 使用 Selenium 来填写用户名和密码字段以允许 Twitter 授权。这应该是一项非常基本的任务,但它一直给我一个错误。这是我要填写的 HTML 中的用户名字段:

<div class="row user ">
  <label for="username_or_email" tabindex="-1">Username or email</label>
  <input aria-required="true" autocapitalize="off" autocorrect="off" autofocus="autofocus" class="text" id="username_or_email"  name="session[username_or_email]" type="text" value="">
</div>

这是密码字段的 HTML:

<div class="row password ">
  <label for="password" tabindex="-1">Password</label>
  <input aria-required="true" class="password text"  id="password" name="session[password]" type="password" value="">
</div>

这是我的代码:

username_field = browser.find_element_by_id("username_or_email") 
password_field = browser.find_element_by_id("password")
username_field.send_keys("MyEmail@gmail.com")
password_field.send_keys("SuperSecretPassword")
password_field.send_keys(Keys.ENTER)

很简单吧?但是在我运行代码的那一刻,当它尝试 send_keys 在错误结束时说:

selenium.common.exceptions.WebDriverException: Message: TypeError - undefined is not a function (evaluating '_getTagName(currWindow).toLowerCase()')

谁能给我解释一下这里发生了什么?为什么它拒绝填写字段?

【问题讨论】:

  • 我很确定缺少代码,您要使用什么浏览器?
  • 我正在为此使用 PhantomJS。 browser = webdriver.PhantomJS(executable_path='PATH TO PHANTOMJS')
  • 我怀疑它的for 标签在那里发挥了一些作用。关注github.com/detro/ghostdriver/issues/450 可能会有所帮助。

标签: python selenium twitter phantomjs


【解决方案1】:

我尝试在此处重现错误,但脚本运行正常

几天前我遇到了一些很奇怪的错误,解决方法是降级 webdriver

我正在使用 chromedriver 2.25

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


driver = webdriver.Chrome(executable_path="/home/user/selenium/chromedriver2.25")
url = 'http://localhost/teste.html'
driver.get(url)

username_field = driver.find_element_by_id('username_or_email')
password_field = driver.find_element_by_id("password")


username_field.send_keys("MyEmail@gmail.com")
password_field.send_keys("SuperSecretPassword")

password_field.send_keys(Keys.ENTER)

html:

<div class="row user ">
  <label for="username_or_email" tabindex="-1">Username or email</label>
  <input aria-required="true" autocapitalize="off" autocorrect="off" autofocus="autofocus" class="text" id="username_or_email"  name="session[username_or_email]" type="text" value="">
</div>
<div class="row password ">
  <label for="password" tabindex="-1">Password</label>
  <input aria-required="true" class="password text"  id="password" name="session[password]" type="password" value="">
</div>

【讨论】:

    猜你喜欢
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    相关资源
    最近更新 更多