1. 程式人生 > 其它 >seleinum 隱式等待、顯示等待

seleinum 隱式等待、顯示等待

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()