如何在 Python 中使用 Selenium 等待多个元素加载?

Barbara Streisand
发布: 2024-11-02 22:45:30
原创
918 人浏览过

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

如何在 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_... 方法在父元素上,然后将上述等待技术应用于子元素。

参考文献

  • [ Selenium Python 文档](https://selenium-python.readthedocs.io/waits.html)
  • [如何使用 Selenium 和 Python 等待加载特定数量的元素](https://stackoverflow .com/questions/58851190/how-to-wait-for-number-of-elements-to-be-loaded-using-selenium-and-python)

以上是如何在 Python 中使用 Selenium 等待多个元素加载?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板