Python Selenium:確保多個元素載入
透過AJAX 處理動態載入的元素時,確認其外觀可能具有挑戰性。為了處理這種情況,我們將利用 Selenium 的 WebDriverWait 及其各種策略來確保多個元素的存在。
所有元素的可見性:
驗證所有與特定選擇器匹配的元素,我們可以使用visibility_of_all_elements_ located()條件:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
elements = WebDriverWait(driver, 20).until(
EC.visibility_of_all_elements_located(
(By.CSS_SELECTOR, "ul.ltr li[id^='t_b_'] > a[id^='t_a_'][href]")
)
)
等待特定數量的元素:
如果需要等待特定數量的元素加載,可以使用帶有ExpectedConditions 的lambda 函數類:
WebDriverWait(driver, 20).until(
lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)
子元素的XPath:
要等待父元素中的子元素,而不是搜尋整個DOM,您可以使用XPath 表達式:
WebDriverWait(driver, 20).until(
EC.presence_of_element_located(
(By.XPATH, "//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_')]")
)
)
自訂等待條件:
如果您喜歡建立自己的等待條件,您可以定義webdriver.support.ui.ExpectedCondition 的子類別:
class MoreThanOne(webdriver.support.ui.ExpectedCondition):
def __init__(self, selector):
self.selector = selector
def __call__(self, driver):
elements = driver.find_elements_by_css_selector(self.selector)
return len(elements) > 1
WebDriverWait(driver, 30).until(MoreThanOne('li'))
防止DOM 中元素遺失:
為了避免在查找操作後丟失當前元素,請在執行等待之前將其存儲在變數中:
element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))
結論:
這些技術提供了一種靈活而健壯的方式來等待加載硒中的多種元素。根據您的要求,選擇最適合您的用例的方法。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3