设置元素等待

一、显式等待

  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秒内检测到则程序继续运行,若不存在,则程序以轮询的方式不断的判断元素是否存在,直到超时,抛出异常。

posted @ 2021-03-17 15:07  这不好呐吧  阅读(61)  评论(0)    收藏  举报