您的位置: 网站首页> selenium爬虫> 当前文章

selenium强制等待、显式等待之EC异常模块、隐式等待详解

老董-我爱我家房产SEO2020-07-28165围观,149赞

  1、强制等待

  之前的脚本selenium打开网页后会强制sleep几秒然后退出,如果代码层面出现了quit(),有时候网页未加载完完浏览器就退出了。所以才要强制等待!sleep就是强制等待。

  2、显式等待

  每个网页加载时间是不同的,给每个网页sleep一样的时间也不科学,所以有一种显式等待的方法,即人为设定时间来等待某个事件发生,如果超时则报异常。显式等待官方文档说明:

An explicit wait is a code you define to wait for a certain condition to occur before proceeding further in the code. 
The extreme case of this is time.sleep(), which sets the condition to an exact time period to wait. 
There are some convenience methods provided that help you write code that will wait only as long as required. 
WebDriverWait in combination with ExpectedCondition is one way this can be accomplished

  显式等待通常配合expected_conditions模块来实现,文档代码示例:

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))

  在自动化操作,有一些经常使用的常见条件如下:

title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present

  3、隐式等待

  此外,还有一种隐式等待的方法(也叫智能等待),人为指定一个等待时间,但是它并不针对页面上的某一固定元素进行等待,而是脚本只要有元素定位操作时就会进行判断如果元素可以定位到则往下执行,如果定位不到,它将以轮询的方式不断地判断元素是否被定位到了。一单超出设置的时长还没有定位到元素,则抛出异常。(隐式等待中浏览器会在设定的时间不断的刷新页面去寻找元素)。

  隐式等待官方文档

An implicit wait tells WebDriver to poll the DOM for a certain amount of time when 
trying to find any element (or elements) not immediately available. The default setting is 0. 
Once set, the implicit wait is set for the life of the WebDriver object.

  下一篇用代码感受下强制等待、显示等待、隐式等待的区别。

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    selenium强制等待、显式等待之EC异常模块、隐式等待详解文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200