我在向 google 登录框中的用户名和密码字段发送 key 时遇到问题。 Selenium 找到了 ID 为“Email”和“Passwd”的网络元素,但我无法向它们发送任何 key 。
这是未产生预期结果的代码:
from selenium import webdriver
#from selenium.webdriver.common.keys import Keys
import time
username = "test"
password = "ninja"
driver = webdriver.Firefox()
driver.get(u'http://www.google.com')
driver.implicitly_wait(10)
elem = driver.find_element_by_id("gb_70")
elem.click()
username = driver.find_element_by_id('Email')
username.send_keys(username)
这段代码会产生一个错误:
Traceback (most recent call last): File "SERPkopi.py", line 18, in username.send_keys(username) File "/Users/Sverdrup/virtualenv-1.6.1/Alert/lib/python2.7/site- packages/selenium/webdriver/remote/webelement.py", line 142, in send_keys local_file = LocalFileDetector.is_local_file(*value) File "/xxxxx/xxxxxx/virtualenv-1.6.1/Alert/lib/python2.7/site- packages/selenium/webdriver/remote/webelement.py", line 253, in is_local_file for i in range(len(val)): TypeError: object of type 'WebElement' has no len()
这很奇怪,因为相同的代码可以写入 google 的“q”(查询)字段
我尝试通过 id、名称、xpath 来识别 webElement,但都无济于事。
原因背景:
今天我开始关注 google 快讯,并想在我公司的客户名称上设置快讯(这是企业对企业的设置,因此客户本身就是公司)。客户相对较少,我不认为我会收到很多关于他们名字的提醒,但如果能够跟踪他们就太好了。
鉴于没有用于 google 提醒的 API,我想我应该使用 selenium 以编程方式输入几百个客户的姓名。不过,我首先必须能够登录到我的帐户...
我真的很感激所有的帮助。
真诚的
最佳答案
所以这可能是一个苦乐参半的答案,但您的脚本基本上没问题。这是问题所在:
username = "test"
#....
username = driver.find_element_by_id('Email')
username.send_keys(username)
您将用户名设置得很好,但您随后继续将其重新定义为 Email
元素,然后由于最后一行而导致错误 - 您正在发送 username
元素作为字符串返回到自身(这是 send_keys
的参数),导致类似 Inception 的困惑事件。 len
错误是因为 Selenium 试图获取 send_keys
参数的长度,它期望是一个字符串,但在本例中是一个元素。为了修复它,只需更改其中一个变量名称即可。例如
user_field = driver.find_element_by_id('Email')
user_field.send_keys(username)
关于javascript - 让 Selenium 将 key 发送到谷歌的登录框(用 python 编码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13163074/