前提:css
咱們在作Web自動化時,有的時候要等待元素加載出來,才能操做,否則會報錯
web
1.強制等待瀏覽器
2.隱式等待ui
3.顯示等待spa
內容:code
一,強制等待
blog
這個比較簡單,就是利用time模塊的sleep的方法來實現utf-8
例子:ci
1 # coding = utf-8 2 from time import sleep 3 from selenium import webdriver 4 # 啓動瀏覽器 5 driver = webdriver.Chrome() 6 # 打開百度首頁 7 driver.get(r'https://www.baidu.com/') 8 # 等待3秒 9 sleep(3) 10 driver.find_element_by_css_selector("#kw").send_keys("selenium") 11 # 退出 12 driver.quit()
這個就是強制等待3秒,無論你怎麼樣,就是給我停3秒,強制性的element
二,隱式等待
隱式等待就是瀏覽器會在內部執行等待,可是咱們可能看不出來他等待了
例子:
# coding = utf-8 from selenium import webdriver # 啓動瀏覽器 driver = webdriver.Chrome() # 打開百度首頁 driver.get(r'https://www.baidu.com/') driver.find_element_by_css_selector("#kw").send_keys("selenium") driver.find_element_by_css_selector("#su").click() # 隱式等待30秒 driver.implicitly_wait(30) result = driver.find_elements_by_css_selector("h3.t>a") for i in result: print(i.text) # 退出 driver.quit()
三,顯示等待
由於隱式等待有缺陷,好比你想要元素加載出來就執行下面的事情,怎麼辦,這個要用顯示等待了
顯示等待要用到WebDriverWait,配合該類的until()和until_not()方法,就可以根據判斷條件而進行靈活地等待了。它主要的意思就是:程序每隔xx檢查一次,若是條件成立了,則執行下一步,不然繼續等待,直到超過設置的最長時間,而後拋出TimeoutException
例子:
# coding = utf-8 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait # 啓動瀏覽器 driver = webdriver.Chrome() # 打開百度首頁 driver.get(r'https://www.baidu.com/') driver.find_element_by_css_selector("#kw").send_keys("selenium") driver.find_element_by_css_selector("#su").click() # 超時時間爲30秒,每0.2秒檢查1次,直到class="tt"的元素出現 text = WebDriverWait(driver,30,0.2).until(lambda x:x.find_element_by_css_selector(".tt")).text print(text) # 退出 driver.quit()