首頁  >  文章  >  後端開發  >  如何確保 Python Selenium 中載入多個元素?

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

DDD
DDD原創
2024-10-30 00:52:02753瀏覽

How to Ensure Multiple Elements Load in Python Selenium?

Python Selenium:確保多個元素載入

透過 AJAX 處理動態載入的元素時,確認其外觀可能很困難。為了處理這種情況,我們將利用 Selenium 的 WebDriverWait 及其各種策略來確保多個元素的存在。

所有元素的可見性:

驗證所有與特定選擇器匹配的元素,我們可以使用visibility_of_all_elements_ located()條件:

<code class="python">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]")
    )
)</code>

等待特定數量的元素:

如果需要等待對於要載入的特定數量的元素,您可以將lambda 函數與ExpectedConditions 類別結合使用:

<code class="python">WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)</code>

子元素的XPath:

等待子元素父元素中的元素,而不是搜尋整個DOM,您可以使用XPath 表達式:

<code class="python">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_')]")
    )
)</code>

自訂等待條件:

如果您喜歡建立自己的等待條件等待條件,可以定義webdriver.support.ui.ExpectedCondition 的子類別:

<code class="python">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</code>
<code class="python">WebDriverWait(driver, 30).until(MoreThanOne('li'))</code>

防止DOM 中元素丟失:

來避免在查找操作後丟失當前元素,在執行等待之前將其存儲在變量中:

<code class="python">element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))</code>

結論:

這些技術提供了一種靈活且健壯的方法等待Selenium 中多個元素的加載。根據您的要求,選擇最適合您的用例的方法。

以上是如何確保 Python Selenium 中載入多個元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn