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

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: 元素可点击

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

你可能感兴趣的:(selenium)