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

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

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

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'))

结论:

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

最新教程 更多>
  • 治疗高血压的整体阿育吠陀方法
    治疗高血压的整体阿育吠陀方法
    管理高血压的整体阿育吠陀方法 阿育吠陀治疗高血压提供了一种自然和整体的方法来管理这一常见的健康问题。在阿育吠陀中,高血压通常与能量的不平衡有关,特别是皮塔和瓦塔。这种古老的医学体系旨在通过个性化治疗和生活方式改变来恢复平衡并促进整体健康。 治疗高血压的阿育吠陀疗法包括使用特定草药,如阿朱那、南非醉茄...
    编程 发布于2024-11-08
  • 如何设置 Y 轴范围以丰富多个子图布局中的可视化?
    如何设置 Y 轴范围以丰富多个子图布局中的可视化?
    设置子图轴范围背景在可视化中处理多个子图时,有必要控制每个子图的轴范围以确保正确的数据表示。本问题探讨如何在双子图布局中设置第二个子图的 y 轴范围。当 FFT 图出现异常尖峰,导致所需数据不可见时,就会出现此问题。解决方案要解决此问题,请在绘图后使用 pylab.ylim([bottom, top...
    编程 发布于2024-11-08
  • CSS 中的盒模型:制作精确布局的终极指南
    CSS 中的盒模型:制作精确布局的终极指南
    Web设计概念中,盒子模型(Box Model)是CSS中非常关注布局设计的基础知识领域。盒子模型解释了页面上元素的放置和定位方式,这会影响水平度和总体连贯性。 除了概述盒子模型的背景和边框之外,本指南还指导您完成填充、边距和盒子大小调整,以便您可以完全控制布局。要开始专业水平的 Web 项目设计,...
    编程 发布于2024-11-08
  • 什么是语法和语义
    什么是语法和语义
    如果您正在学习一门语言,您可能听说过“语法”这个词并且一直在处理它。 (该死的语法错误)。 几天前的晚上,我在想,我从来没有认真遵循过编程范式和技术,今天我开始从我经常听到的最小主题中学习(即使我已经记住了)。我创建了这个存储库。我采取的学习路径很有特色(在 LEARNING_LIST.md 文件中...
    编程 发布于2024-11-08
  • 如何在不切换焦点的情况下在后台打开新选项卡?
    如何在不切换焦点的情况下在后台打开新选项卡?
    在后台打开新选项卡而不进行焦点切换在这个问题中,用户寻求在单独的选项卡中打开新选项卡不会导致任何焦点转移到新选项卡。他们演示了使用 open() 和 focus() 方法的尝试,但在返回 Chrome 中的当前选项卡之前遇到了新选项卡的短暂闪烁。但是,提供的答案提供了使用事件的替代解决方案自定义事件...
    编程 发布于2024-11-08
  • 如何使用自定义语句扩展 Python 语法?
    如何使用自定义语句扩展 Python 语法?
    向 Python 语法添加新语句Python 的语法允许语句定义,例如 print、raise 和 with。虽然这些语句提供了广泛的功能,但可以扩展此语法以适应自定义语句。创建自定义语句涉及两个主要步骤创建自定义语句:修改语法: 您需要更新 Python 的语法以包含新的定义 陈述。这涉及到修改 ...
    编程 发布于2024-11-08
  • 使用 PHP 中的服务层模式实现简洁且可扩展的代码
    使用 PHP 中的服务层模式实现简洁且可扩展的代码
    服务层模式是一种流行的设计方法,用于处理 PHP 应用程序中的业务逻辑。通过将应用程序逻辑与框架分离,我们创建了一个可扩展、可测试和可维护的代码库。在本文中,我们将通过实际示例介绍服务层模式的基础知识、其优点以及如何在 PHP 应用程序中实现它。 什么是服务层模式? 服务层模式是在应...
    编程 发布于2024-11-08
  • 您能否在 C++ 中实现高效的二分搜索算法,将迭代器返回到搜索结果?
    您能否在 C++ 中实现高效的二分搜索算法,将迭代器返回到搜索结果?
    在 C 中搜索高效的二分搜索算法 程序员经常寻求实现高效的二分搜索算法,以提供对数时间复杂度的优势。一个常见的要求是算法返回一个指向搜索结果的迭代器,而不是一个指示其存在的简单布尔值。C 标准库在 标头中提供了 std::binary_search,但它仅返回一个布尔值。正如提问者所指出的,对于需...
    编程 发布于2024-11-08
  • 使用 Javascript 的心形图案代码
    使用 Javascript 的心形图案代码
    代码 let heart = ""; let size = 6; // Loop to print upper part of the heart for (let i = size / 2; i <= size; i = 2) { for (let j = 1; ...
    编程 发布于2024-11-08
  • 如何在 Chrome DevTools 中轻松识别和监控表单元素事件?
    如何在 Chrome DevTools 中轻松识别和监控表单元素事件?
    了解元素交互触发的事件要在可自定义表单元素上正确识别和处理事件,必须了解交互时触发的特定事件。 Chrome DevTools 提供了一个强大的工具,monitorEvents,来协助完成此过程。使用 monitorEvents()检查目标元素: 右键单击​​该元素并选择“Inspect”或在 De...
    编程 发布于2024-11-08
  • 为什么Go不支持传统继承?
    为什么Go不支持传统继承?
    Go中的继承Go为什么不支持传统类型继承?传统类型继承,即子类继承一个或多个父类的定义,不是 Go 编程语言的一项功能。创建者的基本原理在 Go 语言中FAQ,语言创建者解释说,面向对象的编程语言通常强调定义类型之间的关系,这些关系在 Go 中可以自动推断。 Go 类型不会显式指定类型关系,而是自动...
    编程 发布于2024-11-08
  • 如何在 Python 中创建虚拟环境
    如何在 Python 中创建虚拟环境
    Python 虚拟环境对于管理依赖关系和避免项目之间的冲突至关重要。本指南将引导您完成在 Python 中创建和激活虚拟环境的过程。 第 1 步:导航到您的项目目录 打开终端并导航到要设置 Python 虚拟环境的目录。您可以使用 cd 命令来执行此操作: cd /path/to/y...
    编程 发布于2024-11-08
  • 如何在 Go JSON 解组中处理嵌套数组?
    如何在 Go JSON 解组中处理嵌套数组?
    Golang JSON:通过解组处理嵌套数组在 Go 中,在解组后处理嵌套 JSON 数组时,理解错误至关重要“类型接口{}不支持索引。”当您尝试访问存储在interface{}变量中的JSON数组中的元素时,会出现此错误。要解决此问题,您需要利用类型断言将interface{}变量转换为底层数组类...
    编程 发布于2024-11-08
  • 如何在 Java 中组合路径
    如何在 Java 中组合路径
    组合 Java 中的路径C#/.NET 中的 System.IO.Path.Combine 方法允许将多个路径段组合成一个单一、有效的路径。 Java 提供了实现类似功能的替代方法。Path Object在 Java 7 及更高版本中,建议使用 java.nio.file.Path 类进行路径操作。...
    编程 发布于2024-11-08
  • 有效 JSON 有哪些不同的定义?
    有效 JSON 有哪些不同的定义?
    理解最小有效 JSONJSON 的概念已在各种 RFC 和规范中广泛讨论。 RFC4627 最初将 JSON 定义为序列化对象或数组。根据此定义,仅 {}(空对象) 和 [](空数组) 符合有效、完整的 JSON 字符串的条件。但是,ECMA-404引入了一项修正案,扩大了有效 JSON 字符串的范...
    编程 发布于2024-11-08

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

Copyright© 2022 湘ICP备2022001581号-3