元素的显示等待与隐式等待

Posted 大映葱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了元素的显示等待与隐式等待相关的知识,希望对你有一定的参考价值。

如今多数的Web程序都是用ajax技术,浏览器加载页面时,页面的元素可能并不是同事被加载的,因此要定位这些元素就非常困难,

如果因为在加载某个元素时延迟而造成ElementNotVisibleException的情况出现,那么就会降低自动化脚本的稳定性,这个情况可以通过设置元素等待

改善这种问题。

显式等待--使WebDriver等待某个条件成立时继续执行,否则达到最大时长时抛出超时异常timeoutexception

‘‘‘代码‘‘‘

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
from time import ctime

#WebDriverWait类由webdriver提供的等待方法,在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超时检测不到则抛出异常,

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

element = WebDriverWait(driver,5,0.5).until(
EC.presence_of_element_located((By.ID,"kw"))


element.send_keys("the walking dead")
driver.quit()

‘‘‘代码‘‘‘

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

driver:浏览器驱动

timeout:等待的最长时长默认秒

poll_frequency:步长0.5

ignored_exception:超时后的异常信息,,默认nosuchelementexception

WebDriverWait()一般搭配until()和until_not()使用

until(method,message=‘‘) 调用该方法提供的驱动程序作为一个参数,直到返回值为true

until_not(method,message=‘‘)调用该方法提供的驱动程序作为一个参数,直到返回值为false

presence_of_element_located()该方法判断元素是否存在或者是否被加载在dom树中,并不代表该元素一定可见

expected_conditions类提供了类似以上的处理方法,见书p97页

 

隐式等待--通过一定的时长等待页面上某元素加载完成,如果超出了设置的时长元素还没有被加载,则抛出nosuchelementexception异常

webdriver提供了implicitly_wait()方法来实现隐式等待,用法相对来说简单

 

以上是关于元素的显示等待与隐式等待的主要内容,如果未能解决你的问题,请参考以下文章

selenium 显示等待和隐式等待哪个更好

何时在 Selenium Webdriver 中使用显式等待与隐式等待?

何时在 Selenium Webdriver 中使用显式等待与隐式等待?

什么是Selenium Webdriver中的显式等待与隐式等待?

爬虫之selenium和webdriver—基础:操作cookie和显式等待与隐式等待

selenium显示等待和隐式等待的区别