selenium 隱式等待、顯示等待


from selenium import webdriver
# 顯示等待-提供等待條件
from selenium.webdriver.support import expected_conditions as ec
# 顯示等待-顯示等待類
from selenium.webdriver.support.ui import WebDriverWait
# 顯示等待
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
# 隱式等待,設置一個超時時間,在這個時間內,不斷的尋找元素,超時找不到就拋出異常
# 隱形等待10秒
# driver.implicitly_wait(10)
"""
一次聲明,終生有效--對其后執行的每一行元素定位都有效
所以,通常在創建driver之后就聲明了。
執行邏輯:
       當前代碼執行元素定位操作的時候,若找得到元素,則繼續執行
       若找不到元素,則等待0.5秒,然后再找一次,若還是找不到,則又等0.5秒再找
       如此循環,知道找到元素,若找到元素,則繼續執行代碼
       若達到超時時間,還是不能找到元素,則拋出timeout異常
隱式等待,需頁面全部加載完成再執行,相對浪費時間(頁面雖然加載完成了,但是不代表所有元素都出現了
"""
driver.get("http://127.0.0.1:8088/login")
driver.find_element_by_name("username").send_keys("libai")
driver.find_element_by_name("password").send_keys("opmsopms123")
driver.find_element_by_class_name("btn-login").click()
# 如果代碼中存在大量的強制等待,會導致腳本無意義的拉長執行時間
# time.sleep(3)
# 可以用智能等待來解決這個問題

# 顯示等待:設置一個超時時間和一個元素查找條件,在這個時間內,不斷尋找元素,超時找不到就會報錯
"""
不需要頁面全部加載完成,相對節省時間
只對申明了顯示等待的元素生效
"""
# 代碼量多,且括號多,容易出錯,寫顯示等待代碼的時候,多多注意檢查
# 每隔1秒 檢查一次,最多等待10秒(最大超時時間)
ele = WebDriverWait(driver, 10, 1).until(
    #  visibility_of_element_located()里面傳一個參數,所以里面的參數需要再加一個()
    ec.visibility_of_element_located(
        (
        By.CSS_SELECTOR, "body > section > div.left-side.sticky-left-side > div.left-side-inner > ul > li:nth-child(2)")
    )
)
# 顯示等待這一大段,最終就會返回你想尋找的元素(若超時找不到,也會報timeout異常)
"""
申明一個隱式等待,全局通用
對於一些加載特別緩慢的元素,設置顯示等待,適當為其增加等待時間
當顯示等待與隱式等待同時出現的時候,取時間更多的一個生效
"""
ele.click()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM