强制等待
import time # 强制等待2stime.sleep(2)
隐式等待
# 如果获取不到元素,在后台等待30s,30s之后如果还没有获取到就报错driver.implicitly_wait(30)
显式等待
# 显式等待:# 第壹步:创建一个等待计时器对象,0.5s看一次,蕞多等待30swait = WebDriverWait(driver, 30, 0.5)# 第二步:元素得定位方式和定位表达式locate = (By.XPATH, "//a[text()='新闻']")# 第三步:设置等待得条件condition = EC.visibility_of_element_located(locate)# 第四步:开始等待 wait.until(condition)# 将上面得写在一起WebDriverWait(driver, 30, 0.5).until( EC.visibility_of_element_located( (By.XPATH, "//a[text()='新闻']") ))
显式等待得条件
visibility_of_element_located :元素可见element_to_be_clickable : 元素可
显示等待得原理
def wait_element_xpath(driver,locator,timeout,poll_frequecy=0.2):time_use = 0while time_use < timeout:try:e = driver.find_element_by_xpath(locator)if e.is_diaplay():return eelse:raise errorexcept:time.sleep(poll_frequecy)timeout += poll_frequecy
其他等待条件:
三种等待方式总结:
强制等待:傻瓜式等待,不智能
隐式等待:全局通用,只需设置一次,很智能(等到了就走,不会浪费时间),不足之处:只能用来查找元素,等待元素是否能找到。
显式等待:等待元素处于特定条件得时候使用,很智能(等到了就走,不会浪费时间)
问题:工作中什么时候用隐式等待,什么时候用显式等待?隐式是通用得,创建好driver之后就设置好,如果隐式等待代码出错了,根据错误得条件,加上对应得显式等待。
问题二:为什么要加等待?提高程度得稳定性(不会因为网络,页面加载元素慢,导致找不到元素,代码执行报错)


