百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

selenium中的Xpath元素定位方法_selenium常用api之元素定位有哪几种方法

myzbx 2025-02-20 17:00 24 浏览

Selenium 是一个强大的工具,用于自动化Web浏览器的操作。XPath(XML Path Language)是Selenium中用来定位页面元素的一种方法,它提供了一种在XML文档中查找信息的语言。以下是Selenium中XPath的一些常见用法:

常用表达式规则

用法

名称

表达式

示例

描述

绝对路径

/

/html/body/input

从根节点html逐级往下找(不跳跃)


相对路径

//

//input

所有input标签


相对路径

//

//input[1]

每个父节点下的第一个input标签


相对路径

//

//input[last()]

每个父节点下的最后一个input标签


相对路径

//

//input[last()-1]

每个父节点下的倒数第二个input标签


相对路径

//

//input[position()<4]

每个父节点下的前3个标签


基础用法

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

//*[@id='username']

id是唯一的,找到id值为'username'的标签


基础用法

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

//input[@name='zp']

找到所有input标签下name值为'zp'的标签


基础用法

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

//button[@class='a b']

找到所有button标签下class值为'a b'的标签


属性法

[@属性名]

//@class

找到所有具有class属性的标签


属性法

运算符

//*[@width>500]

属性值是数字的,可以使用运算符进行比较


属性法

函数

starts-with(@属性名,'属性开头的值')

//*[starts-with(@id,'user')]

找到值以'user'开头的id所在的标签

属性法

函数

contains(@属性名,'属性包含的值')

//*[contains(@id,'sernam')]

找到值中包含'sernam'的id所在标签

属性法

text()='文本'

//*[text()='百度搜索']

匹配文本的值,完全匹配。可代替find_element_by_link_text方法


属性法

contains(text(),'文本包含的值')

//*[contains(text(),'度搜')]

匹配文本包含的值,模糊匹配。可代替
find_element_by_partial_link_text方法


多属性匹配运算符

运算符

描述

示例

and

age=19 or age=20

or

age>19 and age<21

mod

计算除法的余数

5 mod 7

|

计算两个节点集

//book | //cd

+

加法

6 + 4

-

减法

6 - 4

*

乘法

6 * 4

div

除法

8 div 4

=

等于

age=19

!=

不等于

age!=19

<

小于

age<19

<=

小于等于

age<=19

>

大于

age>19

>=

大于等于

age>=19

案例介绍


基于chrome 浏览器的console可以进行快速定位测试。

console中调用xpath的基本格式:$x("xpath表达式")

绝对定位与相对定位

  • 绝对定位:$x("/xpath表达式")
  • 相对定位:$x("//xpath表达式")




1.2 通配符与不包含筛选

属性@

通配符*

不包含not()

包含contains()

selenium 中xpath 常见用法


绝对路径与相对路径

绝对路径:从根节点开始选择元素,使用单斜杠/表示。

示例:/html/body/div[1]/form/input

特点:如果网页结构变化,容易导致定位失败。

相对路径:不从根节点开始,而是从任意位置开始选择元素,使用双斜杠//表示。

示例://input[@name='username']

特点:更灵活,推荐使用。

基于属性定位

使用@符号来选择具有特定属性的元素。

示例://*[@id='loginForm'] 或 //input[@name='password']

基于文本内容定位

使用text()函数来选择包含特定文本的元素。

示例://*[text()='Submit'] 完全匹配

示例://*[contains(text(), 'Sub') 部分匹配

使用逻辑运算符

and 和 or 运算符可以组合多个条件。

示例://input[@type='text' and @name='email']

示例://button[@type='submit' or @class='btn-primary']

使用位置和索引

可以使用方括号[]指定元素的位置或索引。

示例://ul/li[1] 第一个列表项

示例://div[last()] 最后一个

元素

示例://a[position() < 3] 前两个链接

使用通配符

* 表示任何元素。

示例://*[@class='highlight'] 匹配所有类名为highlight的元素,不论标签是什么。

多个属性值匹配

可以通过contains()函数匹配部分属性值。

示例://*[contains(@class, 'btn')] 匹配类名包含btn的所有元素。

属性值以特定字符串开头或结尾

starts-with() 函数用于匹配以特定字符串开头的属性值。

示例://*[starts-with(@id, 'user_')] 匹配ID以user_开头的所有元素。

ends-with() 函数用于匹配以特定字符串结尾的属性值。(注意:此函数仅在支持XPath 2.0及以上版本的浏览器中可用)

组合使用多种定位方式

XPath表达式可以非常复杂,可以根据需要组合多种定位方式。

示例://div[@class='container']//a[contains(@href, 'example.com')]

这些只是Selenium中使用XPath的一部分技巧。XPath的强大之处在于它的灵活性和表达能力,能够帮助测试人员准确定位复杂的HTML结构中的元素。然而,在实际应用中应该尽量保持XPath表达式的简单和可读性,同时要注意避免过于依赖DOM结构,以防页面结构调整后定位器失效。

示例代码:

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.service import Service as ChromeService

from webdriver_manager.chrome import ChromeDriverManager

# 初始化WebDriver(这里以Chrome为例)

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

# 打开目标网页

driver.get('https://example.com')

try:

# 绝对路径与相对路径

absolute_path_element = driver.find_element(By.XPATH, "/html/body/div[1]/form/input")

relative_path_element = driver.find_element(By.XPATH, "//input[@name='username']")

# 基于属性定位

by_id_element = driver.find_element(By.XPATH, "//*[@id='loginForm']")

by_name_element = driver.find_element(By.XPATH, "//input[@name='password']")

# 基于文本内容定位

text_exact_match = driver.find_element(By.XPATH, "//*[text()='Submit']")

text_partial_match = driver.find_element(By.XPATH, "//*[contains(text(), 'Sub')]")

# 使用逻辑运算符

and_operator = driver.find_element(By.XPATH, "//input[@type='text' and @name='email']")

or_operator = driver.find_element(By.XPATH, "//button[@type='submit' or @class='btn-primary']")

# 使用位置和索引

first_li = driver.find_element(By.XPATH, "//ul/li[1]")

last_div = driver.find_element(By.XPATH, "//div[last()]")

first_two_links = driver.find_elements(By.XPATH, "//a[position() < 3]")

# 使用通配符

wildcard_class = driver.find_elements(By.XPATH, "//*[@class='highlight']")

# 多个属性值匹配

contains_class = driver.find_elements(By.XPATH, "//*[contains(@class, 'btn')]")

# 属性值以特定字符串开头或结尾

starts_with_id = driver.find_elements(By.XPATH, "//*[starts-with(@id, 'user_')]")

# 注意:ends-with 函数仅在支持XPath 2.0及以上版本的浏览器中可用

# ends_with_class = driver.find_elements(By.XPATH, "//*[ends-with(@class, 'end')]")

# 组合使用多种定位方式

combined_locators = driver.find_elements(By.XPATH, "//div[@class='container']//a[contains(@href, 'example.com')]")

# 输出找到的元素数量(对于find_elements方法)或者打印元素的文本(对于find_element方法)

print(f"Found {len(combined_locators)} elements using combined locators.")

finally:

# 关闭浏览器

driver.quit()

相关推荐

以文本的方式绘制简单的SVG流程图——flowchart.js

介绍flowchart.js是在浏览器和终端中运行的流程图DSL和SVG渲染。节点和连接是分别定义的,因此可以重复使用节点,并可以快速更改连接。也可以在DSL中对节点和连接器样式进行细微的更改。Git...

全国首套构网型SVG在木垒投运

中新网新疆新闻1月5日电(翟文辉)12月29日,全国首套构网型SVG在新疆木垒华电220千伏四十个井子汇集站并网,本项目是新疆电网继阿克陶构网型储能后又一次构网型支撑项目示范。为全面响应国家“双碳”...

Popmotion – 小巧,灵活的 JS 运动引擎

Popmotion是一个只有12KB的JavaScript运动引擎,可以用来实现动画,物理效果和输入跟踪。原生的DOM支持:CSS,SVG,SVG路径和DOM属性的支持,开箱即用。Popmoti...

零基础教你学前端——43、初识SVG

解决网站图标问题的最佳方案——SVG!SVG是一种基于XML语法的图像格式,英文全称是:ScalableVectorGraphics,即可缩放矢量图,是W3C的一项建议。我们用手机拍摄...

2.3 文件格式全解:PSD/JPG/PNG/SVG/GIF

2.3文件格式全解:PSD/JPG/PNG/SVG/GIF一、文件格式的核心意义文件格式是数字图像的存储规则,决定了:-信息保留程度(图层/透明度/动画)-压缩方式与画质损失-跨平台兼容性-...

vite v6.3.2 发布!HMR 优化+CSS 增强+稳定性提升,前端开发再提速!

前言:Vite6.3.2来了!2025年4月18日,Vite团队正式发布了v6.3.2版本!虽然是一个小版本更新,但修复了多个关键问题,并带来了性能优化和稳定性提升,让开发体验更丝滑!如果你还...

一篇文章带你了解SVG 蒙版(Mask)

SVG蒙版功能可将蒙版应用于SVG形状。蒙版可确定SVG形状的哪些部分可见,以及具有什么透明度。运行效果可以将SVG蒙版视为剪切路径的更高级版本。一、简单的蒙版代码解析:本示例使用ID=mask1定义...

SVG实现的流程图绘制

一、项目简介使用SVG技术实现的流程图绘制二、实现功能流程图块生成、连线、拖拽产生相应的xml和xpdl导入导出json数据放大缩小功能保存操作(选择、自动插入、开始结束、普通活动、子活动、块活动、路...

解锁国内 404 页面:Next.js 设置指南和 33 个有趣 SVG 资源分享

前言当我们访问网站时,如果访问到不存在的路径时,会出现404错误。为了避免给访问者带来不良体验,设计网站时通常会在页面上展示“404页面不存在”的提示,并引导用户进行返回首页等操作。因此在建立网...

交互设计师做好动画后,提交给开发的文档有哪些?

谢邀!简单的说一下自己的看法。首先从制作动画开始。目前制作动画的方式主要有:Gif动画视频动画Web动画,而Web动画又包括:CSS动画、JS动画(Canvas动画、原生JS动画API)、SVG动画等...

Motion for Vue:为Vue量身定制的强大动画库

在前端开发中,动画效果是提升用户体验的重要手段。Vue生态系统中虽然有许多动画库,但真正能做到高性能、易用且功能丰富的并不多。今天,我们要介绍的是MotionforVue(motion-v),...

Web开发人员的福音!8个实用的SVG工具

SVG可缩放矢量图形(ScalableVectorGraphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG是W3C在2000年8月制定的一种新的二维矢量图形格式...

一键画波浪线、一键多图片调色?这3个网站好玩到停不下来

作为一个经常收集网站的PPT设计师,无意中发现了一些超级有趣的网站。只要你动手能力足够强,就一定会利用它做出创意作品。不说废话,直接进入主题。1、炫酷的光线绘画网站http://weavesilk.c...

vite 6.2.5 更新速递:告别SVG路径Bug,构建效率再提升!

Vite6.2.5更新公告2025年4月3日,Vite团队正式发布了Vite6.2.5版本!此次更新虽然是一个小版本迭代,但修复了一个关键问题,涉及SVG文件路径检查,对前端开发者尤...

DrawSVG – SVG 路径动画 jQuery 插件

jQueryDrawSVG使用了jQuery内置的动画引擎实现SVG路径动画,用到了stroke-dasharray和stroke-dashoffset属性。DrawSVG是完全...