为什么要使用等待?
现在前端技术已经非常厉害了,还有多种加载的方式方法,可能导致我们的脚本在跑的时候,元素还没有加载出来,就直接报错了,所以我们使用等待技术
等待的实现方式:
1.sleep休眠模式,强制等待
2.WebDriverWait显式等待
3.implicitly_wait隐式等待
1.sleep休眠模式,强制等待
在调试中我们经常用到,我们希望在某个位置时,停留时间,会使用sleep
sleep()是time模块提供的,可以from time import sleep或者先import time 然后在代码中time.sleep(),其中括号中填入秒数
示例代码:
2.WebDriWait显式等待
是由webdriver提供的等待方法,在设置的时间内,默认每隔一段时间检查一下当前页面元素在不在
显式等待是明确等待某个条件成立时才会继续执行,否则在最大时长里面抛出异常TimeOutException
用到显式等待的话
需要导入三个库:
form selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
示例代码:
WebDriverWait(driver,timeout,poll_frequency).until(EC.presence_of_element_located())
代码讲解:
-WebDriverWait:webdriver提供的显式等待方法
-driver:浏览器 驱动
-timeout:最大等待时间
-poll_frequency:每隔多少秒检查一次元素
-until:WebDriverWait配合使用的方法,里面的查找作为参数,返回值是True
-no_until:返回的则是False
-EC:expected_conditions的重命名
-presence_of_element_located:判断元素是否存在
3.implicitly_wait隐式等待
比较常用的一种等待,以秒为单位,并不会影响代码的执行速度,等到代码执行到这一行时,如果没有找到元素则会自动停留多少秒等待元素的加载,如果超过这个时间则会抛出NoSuchElementExcept异常
捕获异常抛出的时候需要导入NoSuchElementExcept异常
from selenium.common.exceptions import NoSuchElementExcept
示例代码:
网友评论