转载:https://www.cnblogs.com/mabingxue/p/10293296.html
Selenium显式等待和隐式等待的区别
1、selenium的显式等待
原理:显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么久跳出Exception
(简而言之,就是直到元素出现才去操作,如果超时则报异常)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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 driver = webdriver.Chrome() driver.get( 'http://www.baidu' ) element = WebDriverWait(driver, 5 , 0.5 ).util( EC.presence_of_element_located((By. ID , 'kw' )) ) element.send_keys( 'hello' ) driver.quit() WebDriverWait(driver,timeout,poll_frequency = 0.5 ,ignored_exceptions = None ) driver:浏览器驱动 timeout:最长超过时间,默认以秒为单位 poll_frequency:监测的时间间隔,默认为 0.5 秒 ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常 WebDriverWait一般有until和until_not方法配合使用 until(method,message) until_not(method ,message) |
2、selenium的隐式等待
原理:隐式等待,就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。
注意:在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部断的刷新页面去寻找我们需要的元素
1
2
3
4
5
6
7
8
|
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 driver = webdriver.Chrome() driver.implicity_wait( 10 ) driver.get( 'http://www.baidu' ) |
implicity_wait()默认参数的单位为妙,本例中设置等待时长为10秒,首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位是,如果元素可以定位,则继续执行,如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第六秒定位到了元素则继续执行,若直到超出设置的时长10秒还没有定位到元素,则抛出异常。
3.固定等待
固定等待主要是调用time模块的sleep方法,固定等待几秒。例如:
time.sleep(3),等待3S后在执行下一步操作