如何在 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_ located()预期条件来等待,直到与指定定位器匹配的所有元素都被可见的。例如:
<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>
使用 Lambda 函数
如果需要等待特定数量的元素加载,可以将 lambda 函数与 WebDriverWait 结合使用。例如,要等待 10 个元素:
<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>
等待子元素
要等待特定父元素的子元素,您可以使用 .find_element_by_... 方法在父元素上,然后将上述等待技术应用于子元素。
参考文献
以上是如何在 Python 中使用 Selenium 等待多个元素加载?的详细内容。更多信息请关注PHP中文网其他相关文章!