2012-10-31 48 views
1

我在將密鑰發送到谷歌登錄框中的用戶名和密碼字段時遇到問題。 Selenium發現了id爲「Email」和「Passwd」的webelements,但我無法發送任何密鑰給他們。讓硒將密鑰發送到谷歌的登錄框中(用python編碼)

這裏有沒有產生預期的結果代碼:

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()

這是奇怪的,因爲相同的代碼可以寫信給谷歌的「Q '(查詢)字段

我試圖通過id,name,xpath來識別webElement無濟於事。

背景,爲什麼:

我得到了我的眼睛打開谷歌今天警告,並希望建立在我公司的客戶的名字警報(這是一個企業對企業設置的,所以客戶是公司本身)。客戶相對較少,我不認爲我會在他們的姓名上收到很多提醒,但能夠跟蹤他們會很好。

看到如何沒有API的谷歌警報,我想我會用硒以編程方式輸入幾百名客戶的名字。我首先必須能夠登錄到我的帳戶,雖然...

我會realy欣賞所有和任何幫助。

真誠

+0

@root感謝您的意見,我會相應地編輯問題。我試過xpath。我可以得到webelement,這不是問題。我只是不能發送密鑰。 – Rookie

+0

僅供參考@root,問題已更新。 – Rookie

回答

9

所以這可能是一個苦樂參半的答案,但你的腳本本質上是好的。這裏的問題是:

username = "test" 

#.... 

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

您設置的用戶名就好了,但你去重新定義它爲Email元素,然後導致,因爲線下決賽的錯誤 - 你要發送的username元素回本身作爲一個字符串(這是send_keys的參數),導致類似Inception的混沌事件。 len錯誤是因爲Selenium正在嘗試將參數長度設置爲send_keys,它期望它是一個字符串,但在這種情況下是一個元素。爲了解決它,只需更改其中一個變量名稱。例如

​​
+1

阿甘正傳,我喜歡。 – OnenOnlyWalter

+1

@Rookie哈哈,別擔心,我們都在那裏!另外,如果你想刪除一些代碼,你可以嘗試訪問「https:// accounts.google.com」 - 它會跳到你的屏幕:) – RocketDonkey

+0

謝謝@RocketDonkey,你的我的珍妮。 – Rookie