zoukankan      html  css  js  c++  java
  • selenium等待

    在selenium-webdriver中等待的方式简单可以概括为三种:
    1 强制等待,导入time包,调用time.sleep()的方法传入时间,这种方式也叫强制等待,固定死等一个时间,如:time.sleep(5),表示等待5秒
    2 隐式等待,直接调用implicitly_wait()方法,传入等待时间,比如implicitly_wait(10),就代表最长等待10秒
    3 显式等待,导入WebDriverWait和expected_conditions包,调用until()者until_not()方法

    一、强制等待:time,sleep())

    import time
    sleep(5)  #等待5秒

    设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。

    缺点:不智能,使用太多的sleep会影响脚本运行速度。

    二、隐式等待:implicitly_wait()

    driver.implicitly_wait(10) #隐式等待10秒

    由webdriver提供的方法,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用,它不针对某一个元素,是全局元素等待,即在定位元素时,需要等待页面全部元素加载完成,才会执行下一个语句。如果超出了设置时间的则抛出异常。

    缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转),才会执行下一句。某些情况下会影响脚本执行速度。

    三、显示等待:WebDriverWait()

    WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

    需要通过from selenium.webdriver.support.wait import WebDriverWait导入模块

    driver:浏览器驱动
    timeout:最长超时时间,默认以秒为单位
    poll_frequency:检测的间隔步长,默认为0.5s
    ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。

    WebDriverWait与expected_conditions结合使用

    expected_conditions类提供的预期条件判断的方法

    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    wait = WebDriverWait(driver,10,0.5)
    element =waite.until(EC.presence_of_element_located((By.ID,"kw"),message="")
    # 此处注意,如果省略message=“”,则By.ID外面是两层()

    显示等待,自定义等待条件

    #设置等待
    wait = WebDriverWait(driver,10,0.5)
    #使用匿名函数
    wait.until(lambda diver:driver.find_element_by_id('kw'))

    lambda的使用可另行参考python相关教程

  • 相关阅读:
    静静的看twittervision
    MSSQL中的随机函数
    紧张非封闭式开发中
    be my friend
    这个五一
    检讨
    SilverLight,有多少人关心呢?
    并查集模板题P3367 【模板】并查集
    并查集简单介绍
    约数之和模板题
  • 原文地址:https://www.cnblogs.com/pantheryao/p/12160963.html
Copyright © 2011-2022 走看看