• Selenium-几种等待方式


    强制等待

      一直使用的time.sleep(5),可以放在任意地方,不好的地方,不太准确确定时间

    隐形等待

      driver.implicitly_wait(5)

        设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截至,然后执行下一步.注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步

        但他还有一个问题,如果你页面加载挺好的,他会一闪而过,你也看不到具体的东西

        对整个driver的周期都起作用,所以只要设置一次即可,和sleep不同

    显性等待

      WebDriverWait,配合该类的unitl()和until_not()方法,就能够根据判断条件而进行灵活的等待.

    如何理解?

      每隔N秒检查下,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常

      语法如下:

        from selenium.webdriver.support.wait import WebDriverWait

        WebDriverWait(driver,超时时长,调用频率).until(可执行方法,超时的时候返回的信息)

        对上述部分的解释:

          drvier:  生成的driver是什么名字,就是什么

          超时时长:  超时时长

          调用频率:  调用unitl或until_not中的方法的间隔时间,默认是0.5秒

          until是当元素出现或什么条件成立则继续执行

          unitl_not是当元素消失或什么条件不成立则继续执行

          可执行的方法:  达到条件,执行的下一步

          超时的时候返回的信息:  超时返回的异常

    #! /usr/bin/env python
    #coding=utf-8
    
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    import time
    
    driver = webdriver.Firefox()
    #隐性等待
    driver.implicitly_wait(5)
    driver.get("https://www.baidu.com/")
    
    #显性等待
    #WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时").send_keys("博客园")
    
    kw = WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加载超时")
    kw.send_keys("博客园")
    
    time.sleep(3)
    driver.quit()

    调试的时候用 强制等待

    等调通了,再改成隐形等待或者显性等待

  • 相关阅读:
    前端设计工具
    centos7管理用户权限
    搜索个人内容方法
    HDU-6668-Polynomial(数学)
    Gym-100923L-Por Costel and the Semipalindromes(进制转换,数学)
    Gym-100923I-Por Costel and the Pairs(数学,思维)
    Gym-100923A-Por Costel and Azerah(DP)
    CodeForces-585B(BFS)
    CodeForces-437C(贪心)
    CodeForces-449B(单源最短路,思维)
  • 原文地址:https://www.cnblogs.com/R-bear/p/7470853.html
Copyright © 2020-2023  润新知