首頁  >  文章  >  後端開發  >  如何在 Python 中使用 Selenium 等待多個元素載入?

如何在 Python 中使用 Selenium 等待多個元素載入?

Barbara Streisand
Barbara Streisand原創
2024-11-02 22:45:30846瀏覽

How to Wait for Multiple Elements to Load Using Selenium in Python?

如何在Python 中使用Selenium 等待多個元素載入

當使用透過AJAX 非同步載入的動態Web 元素時,它變成在對元素執行任何操作之前確保元素已完全載入至​​關重要。本文提供了幾種在 Python 中使用 Selenium 等待多個元素載入的方法。

將 WebDriverWait 與自訂條件結合使用

一種方法涉及使用WebDriverWait 類別。在這種情況下,您檢查與特定選擇器相符的元素數量是否超過指定閾值。例如:

<code class="python">from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

def wait_for_multiple_elements(driver, selector, min_count):
    """
    Wait for a minimum number of elements to load.
    Args:
        driver (WebDriver): Selenium WebDriver instance.
        selector (str): CSS selector for the elements.
        min_count (int): Minimum number of elements to wait for.
    """
    def custom_condition(d):
        elements = d.find_elements(By.CSS_SELECTOR, selector)
        return len(elements) >= min_count

    return WebDriverWait(driver, 30).until(custom_condition)</code>

將WebDriverWait 與Visibility_of_All_Elements_Located 結合使用

此方法使用內建的visibility_of_all_elements

<code class="python">from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

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>
此方法使用內建的visibility_of_all_elements_ located()與指定器的條件來匹配所有元素都被可見的。例如:

使用 Lambda 函數

<code class="python">WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements_by_xpath("//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_') and starts-with(., 'Category')]")) == 10
)</code>
如果需要等待特定數量的元素加載,可以將 lambda 函數與 WebDriverWait 結合使用。例如,要等待10 個元素:

等待子元素

要等待特定父元素的子元素,您可以使用

.find_element_by_. ..

方法在父元素上,然後將上述等待技術應用於子元素。

參考文獻
  • [ Selenium Python 文件](https://selenium-python.readthedocs.io/waits.html)
[如何使用Selenium 和Python 等待載入特定數量的元素](https://stackoverflow .com/questions/58851190/how-to-wait-for-number-of-elements-to-be-loaded-using-selenium -and-python)

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

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