加载页面时,会遇到代码执行到,但元素没有被加载出来,就会报错找不到元素
此时可以设置元素等待来解决这种问题。
webdriver提供了两种元素等待:显示等待、隐式等待
一、显示等待
原则:等到就继续执行,等不到就终止并抛异常
缺点:繁琐、步骤多
需要引入这些库:
# 设置元素定位使用哪种方法
from selenium.webdriver.common.by import By
# 元素等待类
from selenium.webdriver.support.ui import WebDriverWait
# 提供条件判断函数
from selenium.webdriver.support import expected_conditions as EC
使用方法:
# 代码解释:
# webdriver会等到EC.visibility_of_element_located这个条件成立,
# 每隔0.5s检查一次,最多等待5s。条件成立时就继续执行,否则抛出异常
browser = webdriver.Chrome()
browser.get('网址')
element = WebDriverWait(browser,5,0.5).until(
EC.visibility_of_element_located(
(By.CSS_SELECTOR,css元素定位表达式)
)
)
二、隐式等待
与显示等待类似,均是在最大等待时间范围内等到就继续执行,等不到就报错
browser = webdriver.Chrome()
browser.get('网址')
# 申明隐式等待,只对申明之后的代码有效,默认单位:秒,默认轮询时间0.5s
browser.implicitly_wait(5)
三、显示等待、隐式等待、强制等待对比
1、显示等待比隐式等待省时
2、隐式等待比显示等待的写法更简单
3、强制等待,会降低代码执行效率,即使加载完元素,依然等待
如何选择?
如果本机电脑性能不太好,加载慢,可以使用强制等待;
如果代码量少,可以使用隐式等待;
如果代码量多,建议使用显示等待,并将显示等待封装为方法来调用