1. 程式人生 > >Selenium成長之路-15設定等待時間

Selenium成長之路-15設定等待時間

為了保證執行的指令碼正常載入,我們需要的是設定等待時間,具體有以下幾種:

sleep():設定固定等待時間,主要由time包提供,也可叫強制等待,

也就是說不管頁面是否載入完成,都會等待這些時間。

程式碼如下:

# coding = utf-8
from selenium import  webdriver
import time
from selenium.webdriver.common.by import By
# from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
url = 'http://www.baidu.com'
driver.get(url) #在百度輸入框輸入python browser = driver.find_element(By.ID,'kw') browser.send_keys("pythonn") time.sleep(5) driver.quit()

implicitly_wait():webdriver包提供的一個等待方法,也叫隱私等待,

隱式等待是設定了一個最長等待時間,如果規定時間內網頁載入完成,則進行下一步,否則一直等到時間截止,再進行下一步。

程式碼如下:

# coding = utf-8
from selenium import  webdriver
import time
from 
selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() url = 'http://www.baidu.com' driver.get(url) #在百度輸入框輸入python browser = driver.find_element(By.ID,'kw') inp=browser.send_keys("pythonn") driver.implicitly_wait(3) #刪除一個n browser.send_keys(
Keys.BACK_SPACE) driver.implicitly_wait(3) #回車鍵 browser.send_keys(Keys.ENTER) driver.implicitly_wait(10) driver.quit()

WebDriverWait():同樣也是 webdirver 提供的方法,也叫顯示等待,

語法結構如下:

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

driver:webdriver.Chrome()   主要就是指webdriver的驅動程式

timeout:超時時間,預設單位是秒

poll_frequency:休眠時間的間隔時間,預設0.5秒

ignored_exceptions:超時後的異常資訊,預設丟擲NoSuchElementException異常

配合該類的until()和until_not()方法使用,詳細如下:

until(method,message=''):呼叫該方法提供的驅動程式作為一個引數,直到返回值不為False

unitl_not(method,message=''):呼叫該方法提供的驅動程式作為一個引數,直到返回值為False

主要是:程式每個xx秒檢視一次,如果條件成立,則執行下一步,否則繼續等待,直到超過設定的最長時間,然後丟擲TimeoutException

程式碼如下:

# coding = utf-8
from selenium import  webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
url = 'http://www.baidu.com'
driver.get(url)
browser = driver.find_element(By.ID,'kw')
#設定現實等待,NoSuchElementException 可以不寫
# WebDriverWait(driver,10,1).until(lambda  driver:browser)
try:
WebDriverWait(driver,10,2,NoSuchElementException).until(lambda driver:browser)
print("test pass")
except Exception as e:
print("test file ",format(e))
driver.quit()

這裡應用了一個新函式:lambda 表示式,也叫匿名函式,宗旨就是能一句話寫完的程式碼不需要寫兩句話,把def函式簡單化

不懂得可以看一下廖大大的Python教程:點選這裡

一般在實際專案中,隱式等待使用的頻率會更高一些,但是並不是說現實等待或者強制等待不會去使用。

所以具體怎麼去使用以及使用什麼方法,只要能保證指令碼正常執行不出錯,就是可行的。