设置元素等待
一、显式等待
webdriver等待某个条件成立则继续执行。在设置的时间内,默认每隔一段时间检测一次当前页面元素是否存在,若存在,则继续执行,否则在达到最大时长时抛出异常(TimeoutException)。
具体格式如下:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
- driver:浏览器驱动
- timeout:最长超时时间,默认单位秒
- poll_frequency:检测时间间隔
- 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 import expected_conditions as ec import time from selenium.webdriver.support.ui import WebDriverWait driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.maximize_window() #设置显式等待 element = WebDriverWait(driver, 5, 0.5).until(ec.visibility_of_element_located((By.ID, "kw"))) element.send_keys('selenium') driver.quit()
在本例中使用expected_conditions类提供的方法判断元素是否存在。
expected_conditions类提供了多种预期条件判断方法:
(待补充)
二、隐式等待
隐式等待使用 implicitly_wait()方法实现。
from time import ctime from selenium import webdriver from selenium.common.exceptions import NoSuchElementException driver = webdriver.Chrome() #设置隐式等待时间 driver.implicitly_wait(10) driver.get("http://www.baidu.com") try: print(ctime()) driver.find_element_by_id("kw").send_keys("selenium") except NoSuchElementException as e: print(e) finally: print(ctime()) driver.quit()
本例使用隐式等待10秒,判断元素是否存在,在10秒内检测到则程序继续运行,若不存在,则程序以轮询的方式不断的判断元素是否存在,直到超时,抛出异常。

浙公网安备 33010602011771号