Document

web自动化6---时间的等待

很多时候,页面没有加载出来,就进行了操作,导致报错

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举例 :

  等待页面的“登录”出现

 

posted on 2023-05-06 16:01  小排顾  阅读(38)  评论(0编辑  收藏  举报

导航