如何在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_. ..方法在父元素上,然後將上述等待技術應用於子元素。
參考文獻以上是如何在 Python 中使用 Selenium 等待多個元素載入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!