1. 程式人生 > 其它 >selenium之等待方法

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.不清楚什麼時候用什麼技術