2017-01-08 70 views
1

我嘗試用硒登錄谷歌。如果我使用睡眠()這樣的代碼Python硒不能與WebDriverWait一起工作

browser = webdriver.Firefox() 
browser.get('https://admin.google.com/') 

emailElem = browser.find_element_by_id('Email') 
emailElem.send_keys('mymail') 
nextButton = browser.find_element_by_id('next') 
nextButton.click() 

sleep(5) 
passwordElem = browser.find_element_by_id('Passwd') 
passwordElem.send_keys('mypass') 
signinButton = browser.find_element_by_id('signIn') 
signinButton.click() 

如果我改變睡眠WebDriverWait這樣

browser = webdriver.Firefox() 
browser.get('https://admin.google.com/') 

emailElem = browser.find_element_by_id('Email') 
emailElem.send_keys('mymail') 
nextButton = browser.find_element_by_id('next') 
nextButton.click() 


passwordElem = WebDriverWait(browser, 5).until(
    EC.presence_of_element_located(browser.find_element_by_id('Passwd')) 
) 
passwordElem.send_keys('mypass') 
signinButton = browser.find_element_by_id('signIn') 
signinButton.click() 

它顯示錯誤喜歡這個工作。

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="Passwd"] 

如何使用WebDriverWait?

+0

它不能是'NoSuchElementException'。如果使用'WebdriverWait' +'ExpectedConditions',你應該得到'TimeOutException'!你確定你告訴我們正確的代碼嗎? – Andersson

回答

5

是爲蓋伊說,你browser.find_element_by_id('Passwd'))不neccesary。更改爲((By.ID, "Passwd"))),如documentation中所示。代碼應該是這樣的:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

browser = webdriver.Firefox() 
browser.get('https://admin.google.com/') 

emailElem = browser.find_element_by_id('[email protected]') 
emailElem.send_keys('youremail') 
nextButton = browser.find_element_by_id('next') 
nextButton.click() 


passwordElem = WebDriverWait(browser,  5).until(EC.presence_of_element_located((By.ID, "Passwd"))) 

passwordElem.send_keys('yourpassword') 
signinButton = browser.find_element_by_id('signIn') 
signinButton.click() 
2

你並不需要使用browser.find_elementexpected_conditions(這就是爲什麼你會得到NoSuchElementException,而不是TimeOutException)。使用它的正確方法是(By.ID, "id")

passwordElem = WebDriverWait(browser, 5).until(
    EC.presence_of_element_located((By.ID, "Passwd")) 
)