場景
sleep():設置固定休眠時間。python 的time 包提供了休眠方法sleep() ,導入time 包后就可以使用sleep()進行腳本的執行過程進行休眠。
implicitly_wait():是webdirver 提供的一個超時等待。隱的等待一個元素被發現,或一個命令完成。如果超出了設置時間的則拋出異常。
WebDriverWait():同樣也是webdirver 提供的方法。在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在,如果超過設置時間檢測不到則拋出異常。
代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#!/usr/bin/env python
# -*- codinfg:utf-8 -*-
'''
@author: Jeff LEE
@file: 等待時間.py
@time: 2020-01-16 15:55
@desc:
'''
from
selenium
import
webdriver
#導入WebDriverWait
from
selenium.webdriver.support.ui
import
WebDriverWait
import
time
driver
=
webdriver.Firefox()
driver.get(
'https://www.baidu.com/'
)
#WebDriverWait方法
element
=
WebDriverWait(driver,
10
).until(
lambda
driver:driver.find_element_by_id(
"kw"
))
element.send_keys(
"uniquefu"
)
#添加智能等待
driver.implicitly_wait(
10
)
driver.find_element_by_id(
"su"
).click()
#添加固定等待時間
time.sleep(
10
)
driver.quit()
|
優缺點
sleep():強制等待,不管你瀏覽器是否加載完了,程序都得等待3秒,3秒一到,繼續執行下面的代碼,作為調試很有用,有時候也可以在代碼里這樣等待,不過不建議總用這種等待方式,太死板,嚴重影響程序執行速度
implicitly_wait():隱形等待,比sleep()更加智能,隱形等待是設置了一個最長等待時間,如果在規定時間內網頁加載完成,則執行下一步,否則一直等到時間截止,然后執行下一步。注意這里有一個弊端,那就是程序會一直等待整個頁面加載完成,也就是一般情況下你看到瀏覽器標簽欄那個小圈不再轉,才會執行下一步,但有時候頁面想要的元素早就在加載完成了,但是因為個別js之類的東西特別慢,我仍得等到頁面全部完成才能執行下一步
WebDriverWait():顯示等待,配合該類的until()和until_not()方法,就能夠根據判斷條件而進行靈活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果條件成立了,則執行下一步,否則繼續等待,直到超過設置的最長時間,然后拋出TimeoutException
備注:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver 的驅動程序(Ie, Firefox, Chrome 或遠程)
timeout - 最長超時時間,默認以秒為單位
poll_frequency - 休眠時間的間隔(步長)時間,默認為0.5 秒
ignored_exceptions - 超時后的異常信息,默認情況下拋NoSuchElementException 異常