python3+selenium入門07-元素等待
在使用selenium進行操作時,有時候在定位元素時會報錯。這可能是因為元素還沒有來得及載入導致的。可以等過元素等待,等待元素出現。有強制等待,顯式等待,隱式等待。
強制等待
就是之前文章中的time.sleep(),只是為了看到介面操作效果才那樣設定的。這個是不管找沒找到都會等待的。基本程式碼中不會用這個。
顯式等待
WebDriverWait類是WebDriver提供的等待方法。在設定的時間內,會每隔一段時間去檢查一次當前頁面元素是否存在,如果超過設定時間還沒有見到到就丟擲異常。具體格式如下:
需要先匯入from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:瀏覽器例項
timeout:超時時間,預設已秒為單位
poll_frequency:檢測時間間隔,預設0.5秒
ignored_exceptions:報錯資訊,預設丟擲NoSuchElementException
一般是配合until()和until_not()方法使用
until():可以傳兩個引數,第一個引數是判斷條件,直到第一個引數返回True。第二個引數可以寫文字說明。
until_not():可以傳兩個引數,第一個引數是判斷條件,直到第二個引數返回False。第二個引數可以寫文字說明
expected_conditions類下提供預期條件判斷方法,具體有哪些方法可以自己查下,以title_is()方法舉例,對比title是否正確的。
需要先匯入from selenium.webdriver.support import expected_conditions
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions dr = webdriver.Chrome() dr.maximize_window() dr.get("https://www.baidu.com")#開啟百度 tr = dr.title#獲取title wait = WebDriverWait(dr,10)#例項化顯示等待,設定等待時間10秒 s = wait.until_not(expected_conditions.title_is(tr),'出錯了')#對比title print(s)
因為title肯定一致,返回的是True,所以until_not()肯定不會對。會一直等待著,直到10秒結束。可以改成until()再看下。
隱式等待
WebDriver類下的implicitly_wait()方法可以設定隱式等待。這個只會在指令碼進行元素定位相關的時候執行,會在設定的時間內不斷的判斷這個元素是否被找到了
from selenium import webdriver
from time import ctime
dr = webdriver.Chrome()
dr.maximize_window()
dr.implicitly_wait(10)
try:
dr.get("https://www.baidu.com")#開啟百度
print(ctime())
tr = dr.find_element_by_id('kw123')
except BaseException as f:
print(f)
print(ctime())
finally:
dr.close()
因為沒有一個id是叫kw123,所以肯定會找不到,通過秒數可以看到等待了10秒。
一般這個用的比較多,在瀏覽器初始化之後設定。之後所有定位元素的操作,都會有等待時間的設定。