显示等待
# WebDriver 提供了两种类型的元素等待方式:显示等待 和 隐式等待
# 显示等待是 WebDriver 等待某个条件成立则继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)
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() driver.get("http://www.baidu.com") element = WebDriverWait(driver, 5, 0.5).until(EC.visibility_of_element_located((By.ID, "kw"))) element.send_keys("selenium") driver.quit() # WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None) # 参数分别是, # driver 浏览器驱动, # timeout 最长超出时间, # poll_frequency=0.5 检测的间隔时间(步长),默认0.5 , # ignored_exceptions=None 超时后的异常信息,默认 NoSuchElementException # WebDriverWait 一般与 until() 和 until_not() 方法配合使用 # until(method, message="") 调用该方法提供的驱动程序作为一个参数,直到返回值为True # until_not(method, message="") 调用该方法提供的驱动程序作为一个参数,直到返回值为False # 除 expected_conditions 类提供的丰富的预期条件判断方法外,还可以利用前面学过的 is_displayed() 方法自己实现元素显示等待 from time import sleep, ctime driver = webdriver.Firefox() driver.get("http://www.baidu.com") print(ctime()) for i in range(10): try: e1 = driver.find_element_by_id("kw") if e1.is_displayed(): break except: pass sleep(1) else: print("time out") print(ctime()) driver.quit()
浙公网安备 33010602011771号