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

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

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

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

相关推荐

攀升战境S5电竞主机评测:NVIDIA RTX 3060实力助阵,光追游戏走起

此次笔者将为玩家们推荐一款游戏主机——攀升战境S5。该主机是攀升电脑今年力推的游戏装备,主机采用一线品牌配件,特别是在显卡选用上严苛把关,精选GeForceRTX30系列显卡,玩家们大可以放心选购...

慎买-神牛闪光灯兼容性问题:神牛V350&amp;松下S5M2

神牛V350和松下S5M2的兼容性问题。大家好,我是向往闪光灯人像的Fish。国庆期间,我购买了神牛V350闪光灯和神牛X2T引闪器,但这成为了我的噩梦。我原以为客服和松友们说这款闪光灯在松下S5M2...

Acer蜂鸟持续办公一整天(acer 蜂鸟s5)

移动办公在工作节奏日益加快的今天越来越普遍,目前大部分工作无法在手持设备上完成,笔记本依然是移动办公最明智的选择。为了实现移动办公,很多笔记本越做越轻薄,性能也越来越强,而续航却一直没有很大提升。笔者...

职业车手明年会骑什么?2021赛季各大世巡赛车队使用器材一览

新年的钟声即将敲响,意味着充满魔幻色彩的2020年即将过去。受新冠肺炎的影响,2020年的赛季非常不同寻常。因这一原因不得不延迟举行的各种比赛导致许多车队的赞助商无法得到足够曝光,这也间接导致了许多车...

三星部分手机系统升级路线图流出(三星系统在哪升级)

三星包括Note3和S5在内的手机在升级到4.4.2系统之后一直没有什么系统升级的消息,而最近流出的一张三星的系统升级路线图中出现了一共13台手机升级KTU84P(也就是Android4.4.4)...

索尼Xperia Z3配置大曝光:升级并不大

IT之家(www.ithome.com):索尼XperiaZ3配置大曝光:升级并不大索尼明天就会在IFA2014大会上发布其下代旗舰XperiaZ3智能手机,目前网上曝光了其原型机,并且机身背后...

不进反退 三星Exynos 5433只能运行32位模式?

三星GalaxyNote4将带有两个版本,除了国行使用的骁龙805以外,还有三星自家的Exynos5433版本。而这颗SoC的详细信息三星并没有公布,据外媒Anandtech称,他们从源码中确认...

尼康Z6III测评:对比EOS R6 II、A7M4、S5IIX

摄影器材测评网站DPReview刚刚发布了尼康Z6III的完整图文测评,该机获得金奖评级,得分达到91%。以下是该文章的摘录——尼康Z6III核心规格:2400万像素“部分堆栈式”传感器RAW连拍:机...

赛默飞Ion S5首批数据公布,玩爆前任PGMTM系列

北美时间9月1日,赛默飞发布了两款最新的NGS系统IonS5和IonS5XL,旨在提供更加简捷的靶向测序流程。10月29日IonS5测序仪的首批实验数据产生于阜外医院。阜外医院研究人员选用了主...

Excel技巧:快速制作批量文件夹,省时省力,加强工作效率

大家好,如果公司领导要求按人员姓名制作文件夹,以一人一档的形式呈现人员档案,办公人员一个一个制作费时费力,而且效力低下,今天为大家介绍快捷制作批量文件夹的方法下面我们用图片来进行演示操作打开表格,选...

国行、港版、美版Apple watch各版本售价一览

今天凌晨,苹果牌手表正式发布,苹果开始正式进入可穿戴设备领域,除了功能和外观,我相信大家更关心的是价格问题了,小编就将国行、港版、美版的Applewatch售价做一总结,以供参考。国行:美版:港版:...

松下全画幅微单S5和S1到底哪里不一样?

Hello,我是ET,欢迎大家来到我的“相机笔记”。————9月2日晚,松下正式发布了第4款全画幅微单LUMIXS5。这一篇,我们主要来说松下LUMIXS5和LUMIXS1到底有哪些区别...

融会贯通之典范 神舟S7-2021S5评测

便携、性能、续航,这简简单单的六个字道出了这么些年来笔记本电脑的设计方向,可是由于底层技术、模具设计等等原因,这三点并不能很好的融合在一起。虽说闻道有先后,术业有专攻,但能够有一台融会贯通的产品,不是...

三国志战略版:S5赛季装X指南,开荒不是一成不变,需要因地制宜

大家好我是零氪玩家花席,S5赛季已经开始,因为S5赛季的野地阵容和S4赛季没有区别,所以S5赛季开荒相对不难。你在S4有经验,并且多了很多武将和战法,还能用150赛季功勋兑换7500战法点。S5赛季新...

聊聊松下S5M2和S5M2X的区别(松下s5k和s5c有什么区别)

先简单说下哪里不同:12bitRAWHDMI外录支持直接将视频录制到USB-SSD上多了All-Intra和ProRes编码支持有线/无线IP推流,USB网络连接黑化的机身不过要特别强调一下,S5...