2017-01-08 39 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")) 
)