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

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

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

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

相关推荐

别让水 “跑” 出卫生间!下沉设计打造滴水不漏的家

你是否遭遇过卫生间的水“偷偷溜”进客厅,导致木地板鼓起、墙角发霉的糟心事?又是否为卫生间门口反复渗漏,不得不一次次返工维修而头疼不已?在家庭装修中,卫生间防水堪称“兵家必争之地”,而卫生间门口下...

歼-10CE vs 阵风:谁才是空中霸主?全面性能对比解析

歼10CE与法国阵风战斗机性能深度对比分析一、总体定位与设计哲学歼10CE:单发中型多用途战斗机,侧重于空优(制空权争夺)和对地对海打击,具有较高的性价比和较强的多任务能力。法国阵风战斗机:双发中型多...

知名移植工作室肯定Switch2的图形性能,却被CPU拖了后腿

虽然Switch2发售多日,但没入手的玩家对其性能还是有顾虑。近日,知名移植工作室Virtuos的技术总监在接受采访时讨论了Switch2的性能,并给出了他们工作室的评价。简单来说,Switch2在D...

虹科实测 | CAN XL vs CAN FD传输性能深度对比:速率翻倍,抖动锐减!

导读在汽车电子与工业通信领域,CAN协议持续进化,推动着数据传输效率的提升。本次实测基于虹科PCAN-USBXL与虹科PCAN-USBProFD硬件,在同等严苛条件下对比CANXL与CANF...

1J117合金材料优异的耐腐蚀性、机械性能

1J117合金材料概述定义:1J117是一种不锈软磁精密合金,属于铁铬基合金,其圆棒产品具有特定的形状和尺寸,可满足各种工业应用中的特定需求。标准:技术条件标准为GB/T14986,品种规格标准...

据高管所称,Switch2能轻松移植XSS平台60帧游戏

任天堂,作为主机游戏界的御三家之一,一直注重游戏性而不注重更新升级硬件设备是其最大的特点。各位任豚们,忍受着任天堂早已落后硬件设备,真想感叹一句,天下苦任久矣!但Switch2的出现或许正在渐渐的改变...

FJK-110LED-HXJSN磁传感器有哪应用

作为一名从事电子技术相关工作的自媒体人,我经常会遇到各种传感器的应用问题。其中,FJK-110LED-HXJSN磁传感器是一款在工业自动化、智能设备等领域比较常见的磁场检测元件。今天我想和大家聊一聊这...

浅谈欧标方管200x200x5-12mm质S275JRH的优势与劣势

欧标方管200x200x5-12mm材质S275JRH是一种常见的结构用钢材,广泛应用于建筑、机械制造、桥梁、钢结构等领域。本文将对这种方管的优势与劣势进行浅谈,以帮助读者更好地了解其特性和适用场景。...

宽带拨号错误 651 全解析:故障定位与修复方案

在使用PPPoE拨号连接互联网时,错误651提示「调制解调器或其他连接设备报告错误」,通常表明从用户终端到运营商机房的链路中存在异常。以下从硬件、系统、网络三层维度展开排查:一、故障成因分类图...

模型微调:从理论到实践的深度解析

在人工智能领域,模型微调已成为提升模型性能、使其适应特定任务的关键技术。本文将全面系统地介绍模型微调的各个方面,帮助读者深入理解这一重要技术。一、什么是模型微调模型微调是指在已经训练好的预训练模型基础...

汉语拼音 z、c、s图文讲解(拼音字母表zcs教学视频)

以下是汉语拼音z、c、s的图文讲解,结合发音要领、书写规范及教学技巧:一、发音方法与口诀1.z的发音发音要领:舌尖轻抵上齿背,形成阻碍后稍放松,气流从窄缝中挤出,声带不振动(轻短音)。口诀:“写字写...

吴姗儒惹怒刘宇宁粉丝!吴宗宪护航「是综艺梗」叮咛女儿对话曝光

记者孟育民/台北报道Sandy吴姗儒在《小姐不熙娣》因为节目效果,将男星刘宇宁的头像踩在地上,引起粉丝怒火,节目发声明道歉后仍未平息,她也亲自发文郑重道歉:「我对刘宇宁本人完全没有任何恶意,却在综艺表...

苹果错误地发布了macOS Tahoe公开测试版 现已将其撤下

一些Beta测试人员下载了他们以为是macOSSequoia15.6RC的版本,但却错误地下载了macOSTahoe26公开测试版,后来苹果修复了该问题。苹果预计将于7月25...

make的多种用法!(make 的用法总结)

一、make的用法美make[meik]①V.制造;制定,拟定;使变得,使处于;造成,引起;整理(床铺);做,作出;强迫;挑选,任命…②n.(机器、设备等的)品牌,型号;结构,构造;通电,接电⑤[...

北顿尖刀哗变?俄第20近卫集团军损失惨重,拒绝执行指挥官命令?

【军武次位面】作者:太白近日,外国社交媒体“电报”上传出了一些消息,称俄罗斯在北顿涅兹克战场上的“尖刀”部队之一,俄第20近卫集团军因为损失惨重,已经出现了部分部队拒绝执行指挥官命令,甚至哗变的情况。...