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