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: 元素可点击总结: 隐性等待和显性等待可以同时使用,但是等待的最长时间取两者之中的较大者