Selenuim 三种等待方式解读

    很多情况下写代码时不加等待时间容易出现定位不到元素的情况,可见等待时间的重要性,下面介绍一下selenium的三种等待方式

    1.强制等待----sleep()

    不管浏览器是否加载完了,程序都得等待所设置的时间,设置的时间一到,则继续执行下面的代码。

    from selenium import webdriver

    from time import sleep

    dr=webdriver.Chrome()

    dr.get("https://www.so.com")

    sleep(2)  #强制等待2秒再进行下一步

    dr.find_element(By.ID,"input").send_keys("selenium")

    2.隐性等待----implicitly_wait()

    隐性等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。如果在设置的时间内元素依然没有被加载出来,那就会报错。隐性等待对整个driver的周期都起作用,所以只要设置一次即可,不必像sleep一样每一步设置一次。

    from selenium import webdriver

    from selenium.webdriver.support.ui import WebDriverWait

    dr=webdriver.Chrome()

    dr.implicitly_wait(20) #设置等待20s

    dr.get("https://www.so.com")

    3.显性等待----WebDriverWait

    显性等待时间可以通过WebDriverWait 和util来决定,如果该元素在设置的等待时间以内出现就不再等待,然后执行下一步,如果在设置的时间内没有加载出则会报TimeoutException错误。

    from selenium import webdriver

    from selenium.webdriver.support.ui import WebDriverWait

    dr=webdriver.Chrome()

    dr.implicitly_wait(20) #设置等待20s

    dr.get("https://www.so.com")

    element = WebDriverWait(dr,30).until(lambda dr:dr.find_element(By.ID,"input")) #设置显性等待时间

    element.send_keys("selenium自动化")

    *上述例子用到了lambda函数,简单介绍一下lambda是一个匿名函数,不需要定义的函数,只做简单运算,并返回值,没有复杂的函数体。

     

 

posted @ 2018-08-22 15:54  xinxin8109  阅读(210)  评论(0编辑  收藏  举报