Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana Menunggu Pelbagai Elemen untuk Dimuatkan Menggunakan Selenium dalam Python?

Bagaimana Menunggu Pelbagai Elemen untuk Dimuatkan Menggunakan Selenium dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-11-02 22:45:30984semak imbas

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

Cara Menunggu Pelbagai Elemen Dimuatkan Menggunakan Selenium dalam Python

Apabila bekerja dengan elemen web dinamik yang dimuatkan secara tidak segerak melalui AJAX, ia menjadi penting untuk memastikan elemen dimuatkan sepenuhnya sebelum melakukan sebarang tindakan ke atasnya. Artikel ini menyediakan beberapa kaedah untuk menunggu beberapa elemen dimuatkan menggunakan Selenium dalam Python.

Menggunakan WebDriverWait dengan Keadaan Tersuai

Satu pendekatan melibatkan mewujudkan keadaan menunggu tersuai menggunakan Kelas WebDriverWait. Dalam keadaan ini, anda menyemak sama ada bilangan elemen yang sepadan dengan pemilih tertentu melebihi ambang yang ditentukan. Contohnya:

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

Menggunakan WebDriverWait dengan Visibility_of_All_Elements_Located

Pendekatan ini menggunakan visibility_of_all_elements_located() terbina dalam keadaan yang dijangkakan untuk menunggu sehingga semua elemen padanan ditentukan nampak. Contohnya:

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

Menggunakan Fungsi Lambda

Jika anda perlu menunggu bilangan elemen tertentu untuk dimuatkan, anda boleh menggunakan fungsi lambda dengan WebDriverWait. Contohnya, untuk menunggu 10 elemen:

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

Menunggu Elemen Kanak-kanak

Untuk menunggu elemen anak unsur induk tertentu, anda boleh menggunakan .find_element_by_... kaedah pada elemen induk dan kemudian gunakan teknik menunggu di atas pada elemen anak.

Rujukan

  • [ Dokumentasi Selenium Python](https://selenium-python.readthedocs.io/waits.html)
  • [Cara Menunggu Bilangan Elemen Tertentu untuk Dimuatkan Menggunakan Selenium dan Python](https://stackoverflow .com/questions/58851190/cara-menunggu-jumlah-elemen-untuk-dimuat-menggunakan-selenium-dan-python)

Atas ialah kandungan terperinci Bagaimana Menunggu Pelbagai Elemen untuk Dimuatkan Menggunakan Selenium dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn