使用Selenium Python的find_element()驱动方法

2025 年 1 月 5 日 | 阅读 9 分钟

Selenium 简介

Selenium Python 是一个非常出色的自动化测试工具。Selenium Python 用于查找元素,它会搜索元素,如果元素不存在,则会抛出异常。如今,许多 Web 应用程序都使用了 Angular 和 AJAX 方法。Selenium WebDriver 用于构建一个简单的 API,该 API 可以使用 Selenium Python 绑定编写功能/验收测试。如果您想了解如何直接使用 Selenium Python 打开网页,请查看 Selenium Python 的 get 方法。仅仅能够去到某些地方并没有多大用处。在这里,我们并没有与网页上存在的所有 HTML 元素进行交互,我们需要与页面以及页面内所有的 HTML 元素进行交互。我们可以使用多种策略来查找元素。如果我们想了解更多关于这些策略的信息,可以参考互联网上的相关文章。Selenium WebDriver 提供了各种方法,可用于控制会话,或者换句话说,控制浏览器。Selenium WebDriver 提供了添加 cookie、按返回按钮、在标签页之间导航等功能。

在本文中,我们将讨论 selenium 的 find_element() 方法。Selenium 中的 find_element() 方法为我们解锁了强大的 Web 自动化和交互功能。作为 Selenium WebDriver 中的一个基本功能,find_element() 使开发人员能够精确定位和操作网页中的特定元素。

find_element() 方法简介

Selenium 中的 find_element() 策略提供了开启 Web 自动化和交互巨大能力的方法。作为 Selenium WebDriver 中的一个核心功能,find_element() 使开发人员能够精确定位和控制网页中的特定元素。其强大之处在于能够根据不同的策略查找元素,从而精确控制按钮、输入字段、下拉列表等元素。

其核心在于,find_element() 作为访问 Web 元素的入口,为 Selenium 自动连接和控制这些组件提供了一条途径。通过使用一系列查找策略——从 ID、class name、name、XPath,到 CSS selector——开发人员可以精确地识别出复杂现代网页结构中的元素。

语法和用法

Python 的 Selenium 库中 find_element() 的基本语法结构包括指定一个查找方法和一个用于识别元素的**值**。

  • driver:表示用于控制浏览器的 WebDriver 实例。
  • by:表示用于查找元素的查找方法(例如,ID、class name、XPath)。
  • value:对应于查找方法用于定位元素的值。

Selenium 中 find_element() 方法的定位策略

按 ID

描述:此策略使用元素唯一的 ID 属性查找元素,该属性在 HTML 文档中应该是唯一的。

语法

  • 当 ID 属性唯一时优先使用。
  • 提供了一种快速可靠的方法来查找元素。

用例

适用于具有唯一标识符的元素,如登录表单、页眉或页脚区域。

按 Class Name

描述:此策略根据元素的 class 属性查找元素,该属性可能应用于页面上的多个元素。

语法

  • 当元素共享相同的 class 时适用。
  • 有助于查找一组相似的元素。

用例

用于查找导航菜单、列表或具有相似样式的项中的元素。

按 Name

描述:根据元素的 name 属性查找元素,该属性可能在多个元素之间共享。

语法

  • 当 name 属性是唯一的或在相似元素之间共享时很有用。
  • 通常用于表单输入。

用例

用于识别输入字段、表单元素或具有已知名称的组件。

按 XPath

描述:使用 XPath 表达式根据元素在 XML 结构中的路径来定位元素。

语法

  • 允许根据复杂条件精确地定位元素。
  • 当其他查找器无法提供适当的 ID 时很有用。

用例

用于遍历复杂的 DOM 结构,根据不同的属性或条件选择元素。

按 CSS Selector

描述:使用 CSS 选择器查找元素,提供了一种根据 CSS 模式来定位元素的简洁方法。

语法

  • 提供了一种快速灵活的定位元素的方法。
  • 可以根据类、ID、属性等高效地查找元素。

用例

用于根据特定的样式、类或 ID 来选择元素。

按 Tag Name

描述:根据元素的 HTML 标签名查找元素。

语法

  • 当需要定位同一 HTML 标签的多个实例时适用。
  • 可以检索具有相同标签的一系列元素。

用例

用于检索特定 HTML 标签的所有实例,例如 `

`、`

` 或 ``。

按 Link Text 和 Partial Link Text

描述:根据链接的可见文本或部分文本查找链接。

语法

用例

用于导航到具有已知文本内容的特定链接。

处理不同类型的元素

输入字段

按钮

下拉列表/选择框

复选框和单选按钮

if not checkbox.is_selected()

链接

图像元素

文本元素

文件上传元素

Frame 和 Iframe

find_element() 的高级技术

处理 Stale Element Reference Exception

描述:Stale Element Reference Exception 发生于,当一个最初在页面上定位的元素,由于页面刷新、更新或交互而变得过时或无效时。

带有重试功能的 Python 代码示例

使用 Actions Chains 进行复杂交互

描述:Actions Chains 允许执行复杂的用户交互,如拖放、组合键和鼠标操作。

用于拖放的 Python 代码示例

管理 Cookies

描述:使用 Selenium 控制浏览器 cookie,例如添加、删除或检索 cookie。

用于删除 cookie 的 Python 代码示例

使用 JavaScript Executor 进行高级操作

描述:在浏览器中直接执行 JavaScript 命令,用于复杂任务或使用 Selenium 本地命令不易实现的操作。

用于滚动的 Python 代码示例

Page Object Model (POM) 用于结构化自动化

描述:实现 Page Object Model 设计模式,以结构化的方式组织和管理 Web 元素及其交互。

使用 Page Object Model (POM) 的 Python 代码示例

实施

输出

find_element() Driver Method using Selenium Python

说明

设置环境

  • 从 Selenium 导入必要的模块:webdriver、By、WebDriverWait、expected_conditions 和 StaleElementReferenceException。

启动浏览器会话

  • 使用 webdriver.Chrome() 初始化 Chrome WebDriver 会话。
  • 使用 driver.get('https://javatpoint.com') 导航到示例网站。

处理 Stale Element Reference Exception

  • 创建一个自定义函数 locate_element_safely(),通过重试查找元素一定次数(max_attempts)来处理 StaleElementReferenceException。

执行登录

  • 使用 locate_element_safely() 和 By.ID 查找用户名和密码输入字段。
  • 使用 send_keys() 在相应元素上输入提供的用户名和密码。
  • 使用 locate_element_safely() 和 By.CLASS_NAME 查找并点击登录按钮。

执行搜索

  • 使用 locate_element_safely() 和 By.ID 查找搜索框。
  • 使用 send_keys() 在搜索框中输入提供的产品名称。
  • 使用 locate_element_safely() 和 By.ID 查找并点击搜索按钮。

管理 Cookies 和 JavaScript 执行

  • 使用 driver.add_cookie() 添加新 cookie。
  • 使用 driver.execute_script() 滚动到页面底部。

使用 Actions Chains 进行复杂交互

  • 从 selenium.webdriver.common.action_chains 导入 ActionChains。
  • 使用 ActionChains 执行一系列操作,以与搜索框交互,输入文本并按下 Enter 键。

实现 Page Object Model (POM)

  • 定义一个 Product Page 类来组织与产品信息提取相关的页面元素交互。
  • 在该类中实现一个 get_product_info() 方法,该方法根据 class 为 'product_info' 的元素来提取产品信息。

完成并关闭会话

  • 使用 Product Page 类的 get_product_info() 方法检索产品信息。
  • 打印检索到的产品信息。
  • 使用 driver.quit() 关闭浏览器会话。

结论

该主题首先设置 Chrome WebDriver 会话并导航到指定的网站。为了处理潜在的 Stale Element Reference Exception,它整合了一个自定义函数 locate_element_safely()。此函数通过重试查找元素来确保元素定位的稳定性和可靠性。然后,它通过使用 find_element() 方法及其特定的 ID 来定位用户名和密码输入字段,从而模拟登录过程。接下来,它通过使用 send_keys() 和 click() 方法与这些元素交互,输入提供的凭据并单击登录按钮。脚本进一步演示了搜索操作,通过查找搜索框、输入提供的产品名称并使用 find_element() 和 send_keys() 启动搜索。

此外,它通过使用 add_cookie() 管理 cookie、通过 execute_script() 执行 JavaScript 进行滚动,以及使用 Actions Chains 模拟复杂交互(如拖放、点击和输入文本)来展示更高级的功能。此外,它通过定义 ProductPage 类来实现 Page Object Model (POM) 设计模式,该类封装了与产品信息提取相关的交互。该类包含一个 get_product_info() 方法,该方法使用类内的 find_element() 根据元素的类来提取产品信息。