2016-07-06 60 views
1

我正在做一個簡單的程序,使我能夠填寫登錄表單併發送電子郵件給某人..而當我在上面時,它只是不會更多和在打開某個鏈接時停下來。我真的與Python硒模塊卡住

# Practice Program! 

import requests, os, bs4, webbrowser 
from selenium import webdriver 

url = 'http://google.com' 

res = requests.get(url) 
res.raise_for_status() 

browser = webdriver.Firefox() 

browser.get(url) 

signinElem = browser.find_element_by_id('gb_70') 
signinElem.click() 

idElem = browser.find_element_by_id('Email') 
idElem.send_keys('not_my_real_id') 
idElem.submit() 

pwElem = browser.find_element_by_id('Passwd') 
pwElem.send_keys('not_my_pw') 
pwElem.submit() 

mailElem = browser.find_element_by_class_name('gb_P') 
mailElem.click() 

composeElem = browser.find_element_by_class_name('class="T-I J-J5-Ji T-I-KE L3') 
composeElem.click() 

的代碼工作很好,直到它擊中pwElem,這使我想知道爲什麼signinElemidElem工作,但不pwElem

我碰巧遇到了類似的情況,我可以通過一些鏈接,但其他人不通過。這段代碼有什麼問題?

,我得到了以下錯誤

回溯(最近最後一次調用):文件 「C:/Users/Cyber​​/Downloads/WriteMail.py」 22行,在 pwElem = browser.find_element_by_id ('Passwd')文件「C:\ Users \ Cyber​​ \ Downloads \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py」, line 269,in find_element_by_id return self.find_element(by = By.ID ,value = id_)文件「C:\ Users \ Cyber​​ \ Downloads \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py」, line 752,in find_element 'value':value})['value ']文件「C:\ Users \ Cyber​​ \ Download」 s \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py「, 236行,執行 self.error_handler.check_response(response)文件」C:\ Users \ Cyber​​ \ Downloads \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py「, line 192,in check_response raise exception_class(message,screen,stacktrace)selenium.common.exceptions.NoSuchElementException:消息:Unable to locate element:{」method「:」 (「file:/// C:/Users/Cyber​​/AppData/Local/Temp/tmpczr__hhf/extensions/[email protected]/components/driver-component」)。 js:10770) at(f​​ile:/// C:/Users/Cyber​​/AppData/Local/Temp/tmpczr__hhf/extensions/[email protected]/components/driver-component.js:10779) at(f​​ile: /// C:/用戶/網絡/應用程序數據/本地/溫度/tmpczr__hhf/extensions/[email protected]/components/command-processor.js:12661) at(f​​ile:/// C:/ Users/Cyber​​/AppData/Local/Temp/tmpczr__hhf/extensions/fxdriver @ googlecode。 com/components/command-processor.js:12666) at(f​​ile:/// C:/Users/Cyber​​/AppData/Local/Temp/tmpczr__hhf/extensions/[email protected]/components/command-processor.js :12608)當您提交Email所以你需要實現WebDriverWait等到password現場看到如下

+0

顯示'HTML'爲同一\ – Andersson

+0

+試圖點擊一些鏈接時,沒有browser.find_by_id和browser.find_by_class_name有什麼區別?這就是爲什麼一些作品和其他人不是? –

+0

@Andersson我嘗試使用bs4解析html代碼,但是我得到了[] ... soup.select('#Passwd'),soup.select('password-shown'),soup.select('input [Passwd] '), 他們全部。 –

回答

1

Paasword領域也越來越明顯: -

from selenium.webdriver.support import expected_conditions as EC 

------------- 

wait = WebDriverWait(browser, 10) 

idElem = wait.until(EC.visibility_of_element_located((By.ID, "Email"))) 
idElem.send_keys('not_my_real_id') 
idElem.submit() 


pwElem = wait.until(EC.visibility_of_element_located((By.ID, "Passwd"))) 
pwElem.send_keys('not_my_pw') 
pwElem.submit() 

希望它會幫助你.. :)

+1

令人驚歎!這就是我想要的! ThankSSS! –

0

其實你的錯誤消息指出:.NoSuchElementException:消息:找不到元素

而且我看到有谷歌的登錄頁面上的一個按鈕,右下方電子郵件輸入框。

所以,你可以點擊下一步按鈕,找到密碼輸入框