1

我在向谷歌登录框中的用户名和密码字段发送密钥时遇到问题。Selenium 使用 id 的“Email”和“Passwd”找到 webelements,但我无法向它们发送任何密钥。

这是没有产生预期结果的代码:

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(最近一次调用最后):文件“SERPkopi.py”,第 18 行,在 username.send_keys(username) 文件“/Users/Sverdrup/virtualenv-1.6.1/Alert/lib/python2.7/site-packages/ selenium/webdriver/remote/webelement.py”,第 142 行,在 send_keys local_file = LocalFileDetector.is_local_file(*value) 文件“/xxxxx/xxxxxx/virtualenv-1.6.1/Alert/lib/python2.7/site-packages/ selenium/webdriver/remote/webelement.py",第 253 行,在 is_local_file 中 for i in range(len(val)): TypeError: 'WebElement' 类型的对象没有 len()

这很奇怪,因为相同的代码可以写入谷歌的“q”(查询)字段

我试图通过 id、name、xpath 来识别 webElement 无济于事。

原因的背景:

我今天睁大眼睛看谷歌警报,想在我公司的客户姓名上设置警报(这是企业对企业的设置,所以客户本身就是公司)。客户相对较小,我不认为我会收到很多关于他们名字的警报,但能够跟踪他们会很棒。

看到没有用于 google 警报的 API,我想我会使用 selenium 以编程方式输入数百个客户名称。不过,我首先必须能够登录我的帐户...

我真的很感激所有和任何帮助。

真挚地

4

1 回答 1

9

所以这可能是一个苦乐参半的答案,但你的脚本基本上没问题。这是问题所在:

username = "test"

#....

username = driver.find_element_by_id('Email')
username.send_keys(username)

您将用户名设置得很好,但随后您继续将其重新定义为Email元素,然后由于最后一行导致错误 - 您将username元素作为字符串(这是 的参数)发送回自身send_keys,导致类似盗梦空间的混乱事件。len错误是因为 Selenium 试图将参数的长度设为,send_keys它希望是一个字符串,但在这种情况下是一个元素。为了修复它,只需更改变量名称之一。例如

user_field = driver.find_element_by_id('Email')
user_field.send_keys(username)
于 2012-10-31T18:42:33.680 回答