web自动化中的等待

344 阅读1分钟

sleep() 强制等待

  • sleep() :强制等待,设置固定休眠时间,单位为秒。

    • 强制等待是利用python语言自带的time库中的sleep()方法

    • 缺点:等待的时间不能准确的去设置。

      • 有可能太长,页面已经加载完成了,却还在等待;——降低效率
      • 也可能太短,等待时间结束了,页面还没加载完成。——降低脚本的健壮性
    # 引入sleep
    from time import sleep
    # 强制等待 5 秒后再执行下一步操作
    sleep(5)
    

implicitly_wait() 隐式等待

  • implicitly_wait() :隐式等待,用来等待页面加载完成(直观的就是浏览器tab页上的小圈圈转完)

    • 隐式等待相比强制等待更智能。顾明思义,在脚本中我们一般看不到等待语句,但是它会在每个页面加载的时候自动等待;
    • 隐式等待只需要声明一次,一般在打开浏览器后进行声明。声明之后对整个drvier的生命周期都有效(全局有效),后面不用重复声明。
    • implicitly_wait(10),超时时间10s,10秒内一旦加载完成,就执行下一条语句;如果10秒内页面都没有加载完,就超时抛出异常。
    driver.implicitly_wait(5)
    

WebDriverWait() 显示等待

  • WebDriverWait() :显示等待, 显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明。

    # 引入WebDriverWait
    from selenium.webdriver.support.ui import WebDriverWait
    # 引入expected_conditions类,并重命名为EC
    from selenium.webdriver.support import expected_conditions as EC
    # 引入By类
    from selenium.webdriver.common.by import By
    
    # 创建浏览器对象
    driver = webdriver.Chrome()
    # 设置等待时间10秒,每隔0.5秒调用一次方法
    wait = WebDriverWait(driver, 10, 0.5)
    wait.until(EC.presence_of_element_located((By.ID,'KW')))