selenium定位网页元素

news2025/1/31 3:36:45

1、概述        

        在使用 Selenium 进行自动化测试时,定位网页元素是核心功能之一。Selenium 提供了多种定位方法,每种方法都有其适用场景和特点。以下是通过 idlinkTextpartialLinkTextnametagNamexpathclassNamecssSelector 定位元素的详细说明。

2、通过 id 定位

id 是 HTML 元素的唯一标识符,通常是最高效和最简单的定位方式。

element = driver.find_element(By.ID, "element_id")
  • 特点id 必须是唯一的,因此定位速度快且准确。

  • 适用场景:当元素有唯一的 id 属性时。

3、通过 linkText 定位

linkText 是通过链接的完整文本内容来定位元素。

element = driver.find_element(By.LINK_TEXT, "完整链接文本")
  • 特点:只能用于定位 <a> 标签(超链接)。

  • 适用场景:当链接文本是唯一的,且需要精确匹配时。

4、通过 partialLinkText 定位

partialLinkText 是通过链接文本的一部分来定位元素。

element = driver.find_element(By.PARTIAL_LINK_TEXT, "部分链接文本")
  • 特点:比 linkText 更灵活,只需匹配部分文本即可。

  • 适用场景:当链接文本较长,或者部分文本是动态生成时。

5、通过 name 定位

name 是通过元素的 name 属性来定位。

element = driver.find_element(By.NAME, "element_name")
  • 特点name 通常用于表单元素(如输入框、按钮等)。

  • 适用场景:当元素有唯一的 name 属性时。

6、通过 tagName 定位

tagName 是通过元素的 HTML 标签名称来定位。

element = driver.find_element(By.TAG_NAME, "div")
  • 特点:定位所有具有相同标签的元素。

  • 适用场景:通常用于获取一组元素,然后通过其他方法进一步筛选。

7、通过 className 定位

className 是通过元素的 class 属性来定位。

element = driver.find_element(By.CLASS_NAME, "class_name")
  • 特点class 属性可以有多个值,但 find_element 只能匹配其中一个值。

  • 适用场景:当元素有唯一的 class 属性时。

8、通过 cssSelector 定位

cssSelector 是通过 CSS 选择器来定位元素。

element = driver.find_element(By.CSS_SELECTOR, "input#element_id")
  • 特点

    • 支持 ID、类名、属性、伪类等多种选择器。

    • 性能通常优于 xpath

  • 适用场景:当需要使用复杂的 CSS 选择器时,如定位具有特定属性的元素。

9、通过 xpath 定位

xpath 是一种强大的定位方法,可以通过路径表达式来定位元素。

element = driver.find_element(By.XPATH, "//input[@id='element_id']")
  • 特点

    • 支持相对路径和绝对路径。

    • 可以通过属性、位置、文本等多种方式定位。

  • 适用场景:当其他定位方法无法满足需求时,xpath 是最灵活的选择。

XPath 的基本语法

XPath 使用路径表达式来定位节点。以下是一些常用的语法规则:

  1. /

    • 表示从根节点开始定位。

    • 例如:/html/body/div 表示从根节点 <html> 开始,逐级找到 <body> 下的 <div>

  2. //

    • 表示从任意层级开始查找。

    • 例如://div 表示查找文档中所有的 <div> 元素。

  3. [@属性名='值']

    • 通过元素的属性来定位。

    • 例如://input[@id='username'] 表示查找 id 属性为 username 的 <input> 元素。

  4. text()

    • 通过元素的文本内容来定位。

    • 例如://button[text()='Submit'] 表示查找文本内容为 Submit 的 <button> 元素。

  5. *

    • 通配符,表示任意元素。

    • 例如://div/* 表示查找 <div> 下的所有子元素。

  6. []

    • 用于添加条件。

    • 例如://div[@class='example'][1] 表示查找 class 为 example 的第一个 <div>

  7. ..

    • 表示父节点。

    • 例如://input[@id='username']/.. 表示查找 id 为 username 的 <input> 的父元素。

  8. and / or

    • 用于组合多个条件。

    • 例如://input[@id='username' and @type='text'] 表示查找 id 为 username 且 type 为 text 的 <input>

XPath 的示例

<html>
  <body>
    <div id="header">
      <h1>Welcome</h1>
    </div>
    <div class="content">
      <form id="loginForm">
        <input type="text" id="username" name="username" placeholder="Username">
        <input type="password" id="password" name="password" placeholder="Password">
        <button type="submit">Login</button>
      </form>
    </div>
  </body>
</html>

1. 定位 <h1> 元素

  • XPath: /html/body/div/h1

  • 解释:从根节点 <html> 开始,逐级找到 <body> 下的 <div>,再找到 <h1>

2. 定位 id 为 username 的 <input> 元素

  • XPath: //input[@id='username']

  • 解释:查找任意层级下的 <input> 元素,且 id 属性为 username

3. 定位 class 为 content 的 <div> 下的 <button> 元素

  • XPath: //div[@class='content']//button

  • 解释:查找 class 为 content 的 <div>,然后在其任意子层级中找到 <button>

4. 定位文本内容为 Login 的 <button> 元素

  • XPath: //button[text()='Login']

  • 解释:查找任意层级下的 <button> 元素,且文本内容为 Login

5. 定位 id 为 loginForm 的表单下的所有 <input> 元素

  • XPath: //form[@id='loginForm']//input

  • 解释:查找 id 为 loginForm 的 <form>,然后在其任意子层级中找到所有 <input>

6. 定位第一个 <input> 元素

  • XPath: (//input)[1]

  • 解释:查找文档中所有的 <input> 元素,然后选择第一个。

7. 定位 type 为 password 的 <input> 元素

  • XPath: //input[@type='password']

  • 解释:查找任意层级下的 <input> 元素,且 type 属性为 password

10、总结

  • id:最高效,适用于唯一标识。

  • linkTextpartialLinkText:适用于超链接。

  • name:适用于表单元素。

  • tagName:适用于获取一组元素。

  • xpath:最灵活,适用于复杂定位。

  • className:适用于具有唯一类名的元素。

  • cssSelector:性能好,适用于复杂选择器。

在实际使用中,可以根据元素的特点和页面结构选择最适合的定位方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2286725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Autogen_core 测试代码:test_cache_store.py

目录 原始代码测试代码代码中用到的typing注解 原始代码 from typing import Dict, Generic, Optional, Protocol, TypeVarT TypeVar("T")class CacheStore(Protocol, Generic[T]):"""This protocol defines the basic interface for store/cache o…

变压器的漏感

测量变压器漏感的时候需要将次级绕组短路&#xff1a; 测量变压器初级线圈的电感方法很简单&#xff0c;直接用LCR测量就可&#xff0c;无需像测量漏感那样将次级绕组短接&#xff1a;

从ChatGPT热潮看智算崛起

2025年1月7日&#xff0c;科智咨询发布《2025年IDC产业七大发展趋势》&#xff0c;其中提到“ChatGPT开启生成式AI热潮&#xff0c;智能算力需求暴涨&#xff0c;算力供给结构发生转变”。 【图片来源于网络&#xff0c;侵删】 为何会以ChatGPT发布为节点呢&#xff1f;咱们一起…

攻克 AI 幻觉难题

当下&#xff0c;AI 已经成为我们生活中不可或缺的一部分。无论是智能语音助手&#xff0c;还是对话式的AI模型&#xff0c;它们凭借强大的算法和海量的数据&#xff0c;为我们答疑解惑、出谋划策。 然而&#xff0c;小编今天向AI提问&#xff1a;上山打老虎。他却回答&#x…

格式化时间的插件

1.安装dayjs包 npm i dayjs 2.组件中的应用

自创《艺术人生》浅析

艺术是生活的馈赠&#xff0c;艺术是苦痛的呻吟。 笔记模板由python脚本于2025-01-29 00:01:11创建&#xff0c;本篇笔记适合喜欢写诗读诗诵诗的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 …

防御保护第一次实验:安全策略配置

一、实验拓扑 二、实验要求 三、需求分析 1.创建两个vlan 2.在ENSP中配置基于时间的ACL实现对于办公区PC访问OA Server的时间限制&#xff08;工作日早8到晚6&#xff09;。 3.通过配置基于MAC地址的ACL来实现对于生产区PC访问Web Server的限制&#xff08;除PC3外不能访问&am…

【Pytest】生成html报告中,中文乱码问题解决方案

链接上一篇文章:https://blog.csdn.net/u013080870/article/details/145369926?spm1001.2014.3001.5502 中文乱码问题&#xff0c;python3&#xff0c;Python3.7后&#xff0c;还一个文件就是result.py 因为中文可以在内容中&#xff0c;也可能在文件名&#xff0c;类名&…

【ollama通过命令行启动后如何在网页端查看运行】

ollama通过命令行启动后如何在网页端查看运行 http://localhost:11434/

Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin

Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊&#xff08;毛玻璃&#xff09;对比&#xff0c;Kotlin import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas import android.graphics.RectF …

Jetpack Compose 和 Compose Multiplatform 还有 KMP 的关系

今天刚好看到官方发布了一篇文章&#xff0c;用于讨论 Compose Multiplatform 和 Jetpack Compose 之间的区别&#xff0c;突然想起之前评论区经常看到说 “Flutter 和 CMP 对于 Google 来说项目重叠的问题”&#xff0c;刚好可以放一起聊一聊。 最近写的几篇内容写的太干&…

python生成图片和pdf,快速

1、下载安装 pip install imgkit pip install pdfkit2、wkhtmltopdf工具包&#xff0c;下载安装 下载地址&#xff1a;https://wkhtmltopdf.org/downloads.html 3、生成图片 import imgkit path_wkimg rD:\app\wkhtmltopdf\bin\wkhtmltoimage.exe # 工具路径&#xff0c;安…

解锁FPGA的故障免疫密码

我们身处“碳基智能”大步迈向“硅基智能”序曲中,前者更像是后者的引导程序,AI平民化时代,万物皆摩尔定律。 越快越好,几乎适用绝大多数场景。 在通往人工智能的征程中,算力无处不在,芯片作用无可替代。 十六年前,就已宣称自己是一家软件公司的英伟达,现已登顶全球…

【数据结构】初识链表

顺序表的优缺点 缺点&#xff1a; 中间/头部的插入删除&#xff0c;时间复杂度效率较低&#xff0c;为O(N) 空间不够的时候需要扩容。 如果是异地扩容&#xff0c;增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间&#xff0c;会有不小的消耗。 扩容可能会存在…

【hot100】刷题记录(6)-轮转数组

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转…

如何移植ftp服务器到arm板子?

很多厂家提供的sdk&#xff0c;一般都不自带ftp服务器功能&#xff0c; 需要要发人员自己移植ftp服务器程序。 本文手把手教大家如何移植ftp server到arm板子。 环境 sdk&#xff1a;复旦微 Buildroot 2018.02.31. 解压 $ mkdir ~/vsftpd $ cp vsftpd-3.0.2.tar.gz ~/vs…

深度学习 Pytorch 神经网络的损失函数

本节开始将以分类神经网络为例&#xff0c;展示神经网络的学习和训练过程。在介绍PyTorch的基本工具AutoGrad库时&#xff0c;我们系统地介绍过数学中的优化问题和优化思想&#xff0c;我们介绍了最小二乘法以及梯度下降法这两个入门级优化算法的具体操作&#xff0c;并使用Aut…

C++ 中用于控制输出格式的操纵符——setw 、setfill、setprecision、fixed

目录 四种操纵符简要介绍 setprecision基本用法 setfill的基本用法 fixed的基本用法 setw基本用法 以下是一些常见的用法和示例&#xff1a; 1. 设置字段宽度和填充字符 2. 设置字段宽度和对齐方式 3. 设置字段宽度和精度 4. 设置字段宽度和填充字符&#xff0c;结合…

996引擎 - NPC-添加NPC引擎自带形象

996引擎 - NPC-添加NPC引擎自带形象 截图参考添加NPC参考资料截图参考 添加NPC 编辑NPC表:Envir\DATA\cfg_npclist.xls 1.1. 需要临时隐藏NPC时可以在id前加 // 1.2. 如果NPC朝向不对,可以调整dir 列。(按8方向,上是0顺时针数。我这里给的4) 1.3. 形象代码:NPC代码、怪物…

深度研究新范式:通过Ollama和DeepSeek R1实现自动化研究

引言 在信息时代&#xff0c;海量数据的产生与传播速度前所未有地加快&#xff0c;这既为研究者提供了丰富的资源&#xff0c;也带来了信息筛选与处理的巨大挑战。 传统研究方法往往依赖于研究者的个人知识库、文献检索技能以及时间投入&#xff0c;但面对指数级增长的数据量…