Selenium的三种等待方式(强制等待、隐性等待、显性等待)

    技术2025-04-21  10

    Selenium的三种等待方式强制等待、隐性等待、显性等待

    强制等待隐性等待显性等待

    强制等待

    from time import sleep sleep(10) # 强制等待10秒再执行下一步 缺点:是不管资源是不是完成,都必须等待

    隐性等待

    driver.implicitly_wait(20)

    # 设置全局元素等待超时时间20秒 #设置一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步,超出设置的时长20秒还没有定位到元素,则抛出异常。 缺点:程序会一直等待整个页面加载完成,直到超时,但有时候我需要的那个元素早就加载完成了,只是页面上有个别其他元素加载特别慢,我仍要等待页面全部加载完成才能执行下一步。 注意:对driver起作用,所以只要设置一次即可,没有必要到处设置

    显性等待

    需先引用相关的库

    from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC

    语法:

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

    例如:等待百度输入框元素出现,每隔0.5秒去查看kw元素是否出现,共检查5秒,查找到“kw‘元素在执行下一步

    WebDriverWait(browser, 5, 0.5).until(EC.presence_of_all_elements_located((By.ID, "kw")))

    显示等待是明确提出要等什么,等某个条件满足后,去执行下一个

    WebDriverWait 需要配合 until和until_not,程序每隔N秒检查一次,如果成功,则执行下一步,否则继续等待,直到超过设置的最长时间。会话开始之后使用隐形等待,之后所有的找元素都会调用隐形等待,等待元素可见,等待命令执行

    常用的等待判断

    1、WebDriverWait(driver,等待时长,轮播周期).until()/until_not() 2、expected_condition模块:提供了一系列的期望发生的条件 3、presence_ _of_ element_ located:元素 存在 4、vibility _of_ element_ located: 元素可见 5、element _to_ be_ clickable: 元素可点击

    总结: 隐性等待和显性等待可以同时使用,但是等待的最长时间取两者之中的较大者

    Processed: 0.012, SQL: 9