selenium之等待方法
等待的作用:為了提升自動化成功率
原因:存在網路不穩當可能存在重新整理很慢導致找不到元素
第一種:強制等待
import time
time.sleep(3) # 等待3秒
執行到該程式碼強制停3秒,不能進行判斷
第二種隱式等待
# coding = utf-8
from selenium import webdriver
# 驅動檔案路徑
driverfile_path = r'D:\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 開啟百度首頁
driver.get(r'https://www.baidu.com/')
driver.implicitly_wait(30) # 作用的是driver
# 隱式等待30秒 ;全域性等待30(在沒有發現該元素的時候等待30秒,在30秒之內發現直接執行,在30內沒有繼續執行後續程式碼)
# 必須等待業務全部載入完成才能進行後續操作,或者超時才能繼續操作
第三種:顯示等待
from selenium.webdriver.support.wait import WebDriverWait
配合該類的until()和until_not()方法,就能夠根據判斷條件而進行靈活地等待了。它主要的意思就是:程式每隔xx檢查一次,如果條件成立了,則執行下一步,否則繼續等待,直到超過設定的最長時間,然後丟擲TimeoutException
# coding = utf-8
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
# 驅動檔案路徑
driverfile_path = r'D:\chromedriver.exe'
# 啟動瀏覽器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 開啟百度首頁
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()
# (driver,30,0.2)超時時間為30秒,每0.2秒檢查1次,直到class="tt"的元素出現,否則丟擲異常
text = WebDriverWait(driver,30,0.2).until(lambda x:x.find_element_by_css_selector(".tt")).text
# 退出
driver.quit()
# 問題;一次只對一個元素生效
# 當多個等待一起被應用的時候;按照那個等待的時間長就是用那個時間(隱式等待和顯示等待同時使用)
# 坑:
1.元素找不到(iframe和控制代碼的切換,元素定位不熟練,元素會出現動態的情況,等待新增是否合理)
2.程式碼成功率不高(頻寬的問題)
3.不清楚什麼時候用什麼技術