」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何確保 Python Selenium 中載入多個元素?

如何確保 Python Selenium 中載入多個元素?

發佈於2024-11-08
瀏覽:990

How to Ensure Multiple Elements Load in Python Selenium?

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