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秒還沒有定位到元素,則拋出異常。