selenium中的延时等待方式有三种:强制等待:sleep() 隐示等待:implicitly_wait() 显示等待 WebDriverWait()
1.强制等待:sleep(),time模块下的方法;只能够针对当前单步操作;缺点:无法很好的控制脚本的执行速度、并且只针对局部一步操作而言、如果每步需要添加则出现过多重复代码,且休眠时间如果超过5秒会出现浏览器回话链接断开;
from time import sleep sleep(2) #传入等待时间
2.隐示等待:implicitly_wait():隐式等待;webdriver驱动器对象下的方法;针对是一次会话所有操作,相当于是一个全局等待;只需要声明定义一次,通常在设计脚本中会应用于setUp方法;
from selenium import webdriver #导包 driver = webdriver.Chrome() #获取浏览器驱动对象 driver.implicitly_wait(20) #隐示等待,传入等待时间
3.显示等待,WebDriverWait(驱动器对象,等待时间)
# 两种导入WebDriverWait方式 from selenium.webdriver.support.wait import WebDriverWait # 导包 from selenium.webdriver.support.ui import WebDriverWait # 导包
使用webdriverwait只能够与until和not until两个方法进行使用;until和not until中传入的参数可以是lambda匿名函数或者预置条件expected_conditions
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # WebDriverWait 需要传入的是驱动器对象,总体等待时间和刷新时间间隔时间间隔默认0.5 # Presence_of_element_located 表示元素是否存在 必须以元组的形式传入,所以使用到By方法进行定位 WebDriverWait(driver,30,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
如果unitl或者not unitl传入的方法定位元素查找到则会返回对应的对象,如果未找到则会抛出TimeoutException异常
EC预置条件模块具有很多类型的判断:
presence_of_element_located 判断当前元素是否存在
Presence_of_all_elements_located 判断一组元素是否存在
Text_to_be_present_in_element_value 判断元素值是否有xx文本信息
Presence_of_all_elements_located 判断一组元素是否存在