2017-01-08 7 views
1

私はセレンでgoogleにログインしようとしています。それは私がこのコード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() 

のような睡眠を()を使用する場合、私はこの

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

ようWebDriverWaitに睡眠を変更する場合には、このようなエラーが表示され動作します。

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

WebDriverWaitの使い方は?

+0

「NoSuchElementException」にすることはできません。 'WebdriverWait' +' ExpectedConditions'の場合、 'TimeOutException'を取得する必要があります!正しいコードを表示してもよろしいですか? – Andersson

答えて

5

です。 documentationのように((By.ID, "Passwd")))に変更してください。コードは次のようになります。

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にする必要はありません(そのため、TimeOutExceptionの代わりにNoSuchElementExceptionが得られます)。ガイはあなたbrowser.find_element_by_id('Passwd'))がneccesaryではない、言ったようにそれを使用する正しい方法は、はい(By.ID, "id")

passwordElem = WebDriverWait(browser, 5).until(
    EC.presence_of_element_located((By.ID, "Passwd")) 
) 
関連する問題