目录
一.强制等待
time.sleep()
缺点:不智能,不能根据具体情况具体分析。设置时间太短或太长。
二.隐式等待
- 隐式等待针对元素定位。设置等待时间,如在规定时间内元素定位成功,则执行下一步。如果未成功,报超时异常。
- 隐性等待对整个driver的周期都起作用,只需要设置一次。
"""隐式等待"""
from selenium import webdriver
url = 'https://www.baidu.com/'
# 创建浏览器对象
driver = webdriver.Chrome()
# 设置隐式等待10秒
driver.implicitly_wait(10)
driver.get(url)
# 定位图片
img = driver.find_element_by_xpath('//*[@id="lg"]/map/area')
二.显式等待
- 明确等待某一个元素
- 根据判断条件进行灵活等待,程序每隔一段时间检测一次,如果检测结果与条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间为止,然后抛出TimeoutException异常。
- 显式等待涉及到多个模块:By、expected_conditions和WebDriverWait。
各模块说明如下
By:设置元素定位方式,共八种。
1.id属性定位find_element(By.ID,"id")
2.name属性定位find_element(By.NAME,"name")
3.classname属性定位find_element(By.CLASS_NAME,"claname")
4.a标签文本属性定位find_element(By.LINK_TEXT,"text")
5.a标签部分文本属性定位find_element(By.PARTIAL_LINK_TEXT,"partailtext")
6.标签名定位·find_elemnt(By.TAG_NAME,"input")
7.xpath路径定位find_element(By.XPATH,"//div[@name='name']")
8.css选择器定位find_element(By.CSS_SELECTOR,"#id")
expected_conditions:验证网页元素是否存在,提供了多种验证方式。
WebDriverWait参数说明如下
- driver:浏览器对象driver。
- timeout:超时时间,等待的最长时间。
- poll_frequency:检测的间隔步长,默认为0.5s。
- ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。
- until:条件判断。
- until not:与until逻辑相反。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
# visibility_of_element_located检查网页元素是否可见
condition = expected_conditions.visibility_of_element_located((By.ID,'kw'))
WebDriverWait(driver = driver,timeout=20, poll_frequency=0.5).until(condition)