很多时候,页面没有加载出来,就进行了操作,导致报错
1、强制等待(不管页面有没有加载出来,都是等待这么长时间)
import time
time.sleep(5)
"等待5秒,具体时间根据自己的情况,也可以是0.5"
优点是简单,无需考虑太多。
缺点是灵活性差,如果提前加载成功则浪费了时间,如果没有加载成功,则下一步的操作无法正常进行。
2、隐式等待(全局,但打开新的窗口时,需要重新设置隐式等待。)
driver.implicitly_wait(time) #等待time秒
隐式等待是指一个最长等待时间,如果在此时间内页面提前加载完成,则进行下一步操作;如果在规定时间内仍然未加载成功,则不再等待,下一步操作无法进行。
优点是:这个方式的设置是对于整个driver周期的,所以一般在开头设置一次即可。
缺点是:我们有时并不需要页面的全部元素加载成功,所以等待个别非目标元素加载时会浪费一些时间。
3、显式等待(某个特定的元素设置等待,参考即可)
from selenium.webdriver.support.waitimport WebDriverWait
from selenium.webdriver.supportimport expected_conditions
WebDriverWait( driver, timeout, poll_frequency=0.5, ignored_exceptions=None ).until(expected_conditions.title_is((by.id,"name"),"小红书"))
"""显式等待id是name的,title的值,小红书有没有出现"""
在设置时间内,默认每隔一段时间检测一次当前某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。
1)参数解析:
driver: 浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔步长,默认为0.5s
ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。
2) 一般与until/until_not配合使用;
WebDriverWait(driver,10).until(method,message="") 调用该方法提供的驱动程序作为参数,直到返回值为True
WebDriverWait(driver,10).until_not(method,message="") 调用该方法提供的驱动程序作为参数,直到返回值为False
注意点:
1)until/until_not内需要传的method是函数名(不要带括号),该函数的返回值需要为true;
2)until/until_not内需要传的method必须要有一个参数(如:x),用来接收driver,我们可以看到源码until这个函数的具体内容:
3) until/until_not需要传的method 使用selenium的内置的expected_conditions
expected_conditions 一般也简称为EC,有如下条件:
这里用第7)条text_to_be_present_in_element举例 :
等待页面的“登录”出现
标签:web,driver,默认,method,---,自动化,等待,until,加载 From: https://www.cnblogs.com/SparkProgram/p/17377667.html