WebDriverWait等设置等待时间和超时时间
1.显示等待
等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
——driver:WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程)
——timeout:最长超时时间,默认以秒为单位
——poll_frequency:休眠时间的间隔(步长)时间,默认为 0.5 秒
——ignored_exceptions:超时后的异常信息,默认情况下抛 NoSuchElementException 异常
——如1:element = WebDriverWait(driver, 10).until(lambda x : x.find_element_by_id("id"))
element.send_keys("selenium")
——如2:element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(“Id”))
is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id(“someId”).is_displayed())
WebDriverWai()一般由 unit()或 until_not()方法配合使用:
——until(method, message=’’) 调用该方法提供的驱动程序作为一个参数,直到返回值不为 False。——until_not(method, message=’’) 调用该方法提供的驱动程序作为一个参数,直到返回值为 False。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver=webdriver.Firefox()
driver.get()
WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id("someId"))
#通过检查某个元素是否被加载来检查是否登录成功,我认为当个黑盒子用就可以了。其中10的解释:10秒内每隔0.5毫秒扫描1次页面变化,直到指定的元素
2.隐示等待:implicitly_wait
# 相当于设置全局的等待,在定位元素时,对所有元素设置超时时间,超出了设置时间则抛出异常
# 隐式等待使得WebDriver在查找一个Element或者Element数组时,每隔一段特定的时间就会轮询一次DOM,如果Element或数组没有马上被发现的话。
# 默认设置是0。
# 一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。
driver =
webdriver.Firefox()
driver.implicitly_wait(10)
3.强制等待
import time
time.sleep(10)
4.设置超时:
pageLoadTimeout方法用来设置页面完全加载的超时时间,完全加载即页面全部渲染,异步同步脚本都执行完成。前面的文章都是使用get 方法登录安居客网站,大家应该能感觉到每次打开网页后要等很长一段时间才会进行下一步的操作,那是因为没有设置超时时间而get方法默认是等待页面全部加 载完成才会进入下一步骤,加入将超时时间设置为3S就会中断操作抛出异常
当页面加载后就会执行下面的操作了
setScriptTimeout设置异步脚本的超时时间,用法同pageLoadTimeout一样就不再写了,异步脚本也就是有async属性的JS脚本,可以在页面解析的同时执行。
from selenium import webdriver d= webdriver.PhantomJS() d.set_page_load_timeout(10) d.set_script_timeout(10)#这两种设置都进行才有效,未测试
参考: