Python Selenium: Memastikan Pelbagai Elemen Dimuatkan
Apabila berurusan dengan elemen yang dimuatkan secara dinamik melalui AJAX, mungkin sukar untuk mengesahkan penampilannya. Untuk mengendalikan senario ini, kami akan menggunakan WebDriverWait Selenium dan pelbagai strateginya untuk memastikan kehadiran berbilang elemen.
Keterlihatan Semua Elemen:
Untuk mengesahkan keterlihatan semua elemen yang sepadan dengan pemilih tertentu, kami boleh menggunakan syarat 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>
Menunggu Bilangan Elemen Tertentu:
Jika anda perlu menunggu untuk bilangan elemen tertentu untuk dimuatkan, anda boleh menggunakan fungsi lambda dengan kelas ExpectedConditions:
<code class="python">WebDriverWait(driver, 20).until( lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength) )</code>
XPath for Child Elements:
Untuk menunggu anak elemen dalam elemen induk, dan bukannya mencari seluruh DOM, anda boleh menggunakan ungkapan 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>
Syarat Menunggu Tersuai:
Jika anda lebih suka mencipta sendiri keadaan menunggu, anda boleh mentakrifkan subkelas 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>
Pencegahan Kehilangan Unsur dalam DOM:
Untuk mengelakkan kehilangan elemen semasa selepas operasi cari, simpannya dalam pembolehubah sebelum melakukan penantian:
<code class="python">element = driver.find_element_by_css_selector('ul') WebDriverWait(element, 30).until(MoreThanOne('li'))</code>
Kesimpulan:
Teknik ini menyediakan cara yang fleksibel dan mantap untuk menunggu pemuatan berbilang elemen dalam Selenium. Bergantung pada keperluan anda, pilih pendekatan yang paling sesuai dengan kes penggunaan anda.
Atas ialah kandungan terperinci Bagaimana untuk Memastikan Pelbagai Elemen Dimuatkan dalam Python Selenium?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!