selenium等待

在selenium-webdriver中等待的方式简单可以概括为三种:
1 强制等待,导入time包,调用time.sleep()的方法传入时间,这种方式也叫强制等待,固定死等一个时间,如:time.sleep(5),表示等待5秒
2 隐式等待,直接调用implicitly_wait()方法,传入等待时间,比如implicitly_wait(10),就代表最长等待10秒
3 显式等待,导入WebDriverWait和expected_conditions包,调用until()者until_not()方法

一、强制等待:time,sleep())

import time
sleep(5)  #等待5秒

设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。

缺点:不智能,使用太多的sleep会影响脚本运行速度。

二、隐式等待:implicitly_wait()

driver.implicitly_wait(10) #隐式等待10秒

由webdriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用,它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句。如果超出了设置时间的则抛出异常。

缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转),才会执行下一句。某些情况下会影响脚本执行速度。

三、显示等待:WebDriverWait()

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

需要通过from selenium.webdriver.support.wait import WebDriverWait导入模块

driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔步长,默认为0.5s
ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

WebDriverWait与expected_conditions结合使用

expected_conditions类提供的预期条件判断的方法

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(driver,10,0.5)
element =waite.until(EC.presence_of_element_located((By.ID,"kw"),message="")
# 此处注意,如果省略message=“”,则By.ID外面是两层()

显示等待,自定义等待条件

#设置等待
wait = WebDriverWait(driver,10,0.5)
#使用匿名函数
wait.until(lambda diver:driver.find_element_by_id('kw'))

lambda的使用可另行参考python相关教程

原文地址:https://www.cnblogs.com/pantheryao/p/12160963.html