获取selenium将密钥发送到谷歌的登录框(在python中编码)

时间:2012-10-31 17:00:12

标签: javascript python selenium

我在向Google登录框中的用户名和密码字段发送密钥时遇到问题。 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)

此代码生成错误:

  

追踪(最近一次通话):       文件“SERPkopi.py”,第18行,in       username.send_keys(用户名)       在send_keys中输入文件“/Users/Sverdrup/virtualenv-1.6.1/Alert/lib/python2.7/site- packages / selenium / webdriver / remote / webelement.py”,第142行       local_file = LocalFileDetector.is_local_file(* value)       在is_local_file中输入文件“/xxxxx/xxxxxx/virtualenv-1.6.1/Alert/lib/python2.7/site- packages / selenium / webdriver / remote / webelement.py”,第253行       对于范围内的i(len(val)):       TypeError:'WebElement'类型的对象没有len()

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

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

背景为何:

我今天睁开眼睛看谷歌警报,并希望对我公司的客户名称设置警报(这是一个企业对企业的设置,因此客户就是公司本身)。客户相对较小,我不认为我会在他们的名字上收到很多警报,但能够跟踪它们会很棒。

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

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

此致

1 个答案:

答案 0 :(得分:9)

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

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)