元素等待,显示等待和隐式等待~
- 显示等待:是针对某一个元素进行相关等待判定;
- 隐式等待:不针对某一个元素进行等待,全局元素等待。
相关模块:
WebDriverWait 用于显示式等待查找元素
等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 。
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
——driver:WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程)
——timeout:最长超时时间,默认以秒为单位
——poll_frequency:休眠时间的间隔(步长)时间,默认为 0.5 秒
——ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException 异常
expected_conditions 预期条件类(里面包含方法可以调用,用于显示等待)
NoSuchElementException 用于隐式等待抛出异常
By 用于元素定位
显示等待
案例:检测百度页面搜索按钮是否存在,存在就输入关键词“Selenium” 然后点击搜索
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
'''
显示等待:针对某一个元素进行相关等待判定。
'''
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_css_selector('#kw').send_keys('selenium')
sleep(2)
# 显示等待:当页面查找搜索按钮,每隔0.5s查询一次,3s超时仍查找不到抛异常
element = WebDriverWait(driver, 3, 0.5).until(EC.presence_of_element_located((By.ID, 'su')))
element.click()
sleep(3)
driver.quit()
隐式等待
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep, ctime
'''
隐式等待: 不针对某一个元素进行等待,全局元素等待
'''
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
sleep(2)
# 设置隐式等待时间
driver.implicitly_wait(5)
# 检查元素是否存在,不存在抛出异常
try:
print(ctime())
driver.find_element_by_css_selector("#kw").send_keys("selenium")
driver.find_element_by_css_selector('#su').click()
except NoSuchElementException as msg:
print(msg)
finally:
print(ctime())
sleep(2)
driver.quit()
网友评论