• selenium 的显示等待和隐式等待的区别(记录加强版)



    什么是显示等待和隐式等待?

    显示等待就是有条件的等待
    隐式等待就是无条件的等待

    隐式等待

    当使用了隐式等待执行测试的时候,如果 WebDriver 没有在 DOM 中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常,
    换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是 0

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.implicitly_wait(10)  # 等待十秒加载不出来就会抛出异常,10秒内加载出来正常返回
    browser.get('https://www.zhihu.com/explore')
    input = browser.find_element_by_class_name('zu-top-add-question')
    print(input)
    

     简单理解,就是整个网页请求过程执行了两次,第一请求如果找到你要求的节点

    后面应该整个线程就阻塞了(等待网页加载),等待你设定的时间到了以后再次执行网页请求,如果两次都无法找到你要求的节点。

    直接报错。

     

    显式等待

    指定一个等待条件,和一个最长等待时间,程序会判断在等待时间内条件是否满足,如果满足则返回,如果不满足会继续等待,超过时间就会抛出异常

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    browser = webdriver.Chrome()
    browser.get('https://www.taobao.com/')
    wait = WebDriverWait(browser, 10)
    input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
    button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
    print(input, button)
    

     # 这个也可以设定最长时间,但在设定了最长时间内具体执行了许多次次你要求的元素查找(具体有兴趣可以查看原码)

    只要一旦找到你要求的元素,整个线程就往下执行(不用像隐式等待那样啥啥的等到你要求的时间)。

    其实两个方法各有千秋,明显第一种方法,使用简单粗暴,多线程或者多进程内存与CPU的消耗都少。

    第二种方法,在等待期间,一直频繁的执行寻找元素的指令,如果开多线程,对电脑是一个考验。

     
  • 相关阅读:
    美化单选按钮
    url的处理
    时间戳处理
    模板渲染引擎手册
    Web前端工具——Live Reload – Chrome扩展
    属性(Properties)和字段在C#中的关系
    MVC3中的Model
    使用System.Web.Mvc.Ajax
    javascript之DOM操作
    Javascript之BOM(window对象)
  • 原文地址:https://www.cnblogs.com/sidianok/p/12589540.html
Copyright © 2020-2023  润新知