”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何确保 Python Selenium 中加载多个元素?

如何确保 Python Selenium 中加载多个元素?

发布于2024-11-08
浏览:575

How to Ensure Multiple Elements Load in Python Selenium?

Python Selenium:确保​​多个元素加载

通过 AJAX 处理动态加载的元素时,确认其外观可能具有挑战性。为了处理这种情况,我们将利用 Selenium 的 WebDriverWait 及其各种策略来确保多个元素的存在。

所有元素的可见性:

验证所有与特定选择器匹配的元素,我们可以使用visibility_of_all_elements_ located() 条件:

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]")
    )
)

等待特定数量的元素:

如果需要等待特定数量的元素加载,可以使用带有 ExpectedConditions 的 lambda 函数类:

WebDriverWait(driver, 20).until(
    lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)

子元素的 XPath:

要等待父元素中的子元素,而不是搜索整个 DOM,您可以使用 XPath 表达式:

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_')]")
    )
)

自定义等待条件:

如果您更喜欢创建自己的等待条件,您可以定义 webdriver.support.ui.ExpectedCondition 的子类:

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
WebDriverWait(driver, 30).until(MoreThanOne('li'))

防止 DOM 中元素丢失:

为了避免在查找操作后丢失当前元素,请在执行查找操作之前将其存储在变量中等待:

element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))

结论:

这些技术提供了一种灵活而健壮的方式来等待加载硒中的多种元素。根据您的要求,选择最适合您的用例的方法。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3