use*_*575 4 python selenium selenium-webdriver
我尝试用selenium登录google.如果我像这个代码一样使用sleep(),它会起作用
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()
Run Code Online (Sandbox Code Playgroud)
如果我像这样将睡眠改为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()
Run Code Online (Sandbox Code Playgroud)
它显示这样的错误.
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="Passwd"]
Run Code Online (Sandbox Code Playgroud)
如何使用WebDriverWait?
是的,盖伊说,你browser.find_element_by_id('Passwd'))不是必要的.更改((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('youremail@example.com')
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()
Run Code Online (Sandbox Code Playgroud)
你并不需要使用browser.find_element内expected_conditions(这就是为什么你得到NoSuchElementException的,而不是TimeOutException).正确的使用方法是(By.ID, "id")
passwordElem = WebDriverWait(browser, 5).until(
EC.presence_of_element_located((By.ID, "Passwd"))
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8381 次 |
| 最近记录: |