显式等待:
1.WebDriverWait类,由webdriver提供的等待方法,格式:
WebDriverWait(dirver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:浏览器驱动
timeout:最长超时时间,默认单位秒
poll_frequency:检查间隔时间(步长),默认0.5s
ignored_exceptions:超时后的异常情况,默认抛NoSuchElementException异常
WebDriverWait()一般和until()或until_not()方法配合使用
until(method,message=''):调用该方法提供的驱动程序作为一个参数,只到返回值为true
until_not(method,message=''):调用该方法提供的驱动程序作为一个参数,只到返回值为false
参考代码:
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 driver = webdriver.Firefox() first_url = 'http://www.baidu.com' driver.get(first_url) element = WebDriverWait(driver,5,1).until(EC.presence_of_element_located((By.ID,'kw'))) element.send_keys('selenium') driver.quit()
2.使用is_displayed方法来判断,参考代码:
from selenium import webdriver from time import sleep,ctime driver = webdriver.Firefox() first_url = 'http://www.baidu.com' driver.get(first_url) print(ctime()) for i in range(10): try: el = driver.find_element_by_id('kw22') if el.is_displayed(): print('ok') break except:pass sleep(1) else: print('timeout') driver.quit() print(ctime())
隐式等待:
implicitly_wait()方法,参考代码:
from selenium import webdriver from time import sleep,ctime driver = webdriver.Firefox() first_url = 'http://www.baidu.com' driver.get(first_url) driver.implicitly_wait(10) try: print(ctime()) driver.find_element_by_id('kw') print('yes') except Exception as msg: print(msg) finally: print(ctime()) driver.quit()
死等:sleep休眠,简单但不推荐使用