Xpath表达式
xpath语法规则
/
:根节点,节点分割符- 示例: 定位所有的
<a>
标签元素。 - XPath:
//a
- 示例: 定位包含
<span>
子元素的<div>
元素。 - XPath:
//div[span]
- 示例: 定位第一个
<ul>
元素。 - XPath:
//ul[1]
- 示例: 定位所有的
//
:任意位置*
:任意元素@
:属性- 示例: 定位
class
属性值为 “my-class” 的<div>
元素。 - XPath:
//div[@class='my-class']
- 示例: 定位
.
:当前属性..
:父级节点
格式写法
- 属性:
//*[@属性='属性值']
- 文本值:
//*[text()='文本值']
- 示例: 定位所有包含文本内容 “Hello” 的
<p>
元素 或 定位所有包含文本内容 “Hello” 的<p>
元素。 - XPath:
//*[text()='Hello']
或//p[text()='Hello']
- 示例: 定位所有包含文本内容 “Hello” 的
高级查询 - 函数
contains模糊查询:
[contains(@属性/text(),值)]
- 示例: 定位
class
属性值中包含 “btn” 字符串的<button>
元素。 - XPath:
//button[contains(@class, 'btn')]
1
2# 查找所有文本中含有 "Hello"的 div标签
element = dr.find_element('//div[contains(text(), "Hello")]')- 示例: 定位
starts-with:用于匹配属性值的开头字符
1
2
3
4
5
6'''
<div class="box1">Element 1</div>
<div class="box2">Element 2</div>
<div class="box3">Element 3</div>
'''
element = dr.find_element('//div[starts-with(@class, "box")]')使用多个条件组合定位元素(使用逻辑运算符如
and
,or
,not
来组合多个条件来定位元素)- 示例: 定位
id
为 “header” 且class
包含 “menu” 的<div>
元素。 - XPath:
//div[@id='header' and contains(@class, 'menu')]
- 示例: 定位
concat():
- 用于将多个字符串拼接成一个字符串。
- 示例:
//span[contains(text(), concat('Name: ', 'John Doe'))]
选择包含Name: John Doe
的<span>
元素。
substring():
- 用于提取字符串的子字符串。
- 示例:
//div[contains(substring(@class, 1, 3), 'abc')]
选择class
属性的前三个字符为abc
的所有<div>
元素。
last():
- 用于获取节点在当前节点列表中的最后一个位置。
- 示例:
(//li)[last()]
选择最后一个<li>
元素。
matches() - 正则表达式
- 用于检查文本是否与给定的正则表达式模式匹配。
- 示例:
//div[matches(text(), '^Hello.*$')]
匹配文本以Hello
开头的所有<div>
元素。
层级关系
- 子元素关系:
- 示例: 定位
<div>
元素下的所有直接子元素。 - XPath:
//div/*
- 使用子代选择符
/
可以选择指定元素的直接子元素。 - 示例:
//div/p
选择所有<div>
元素的直接子元素是<p>
的元素。
- 示例: 定位
- 任意子孙选择符 :
- 使用任意子孙选择符
//
可以选择指定元素的所有后代元素,不论层级有多深。 - 示例:
//div//p
选择所有<div>
元素下的所有<p>
元素。
- 使用任意子孙选择符
- 父元素关系:
- 示例: 定位
<span>
元素的父级<div>
元素。 - XPath:
//span/..
- 示例: 定位
- 兄弟元素关系:
- 示例: 定位
<p>
元素后面紧邻的同级<div>
元素。 - XPath:
//p/following-sibling::div[1]
- 示例: 定位
- 祖先元素关系:
- 示例: 定位
<a>
元素的所有祖先元素。 - XPath:
//a/ancestor::*
- 示例: 定位
- 后代元素关系:
- 示例: 定位
<ul>
元素中的所有后代<li>
元素。 - XPath:
//ul/descendant::li
- 示例: 定位
- 定位同一父级的兄弟元素:
- 示例: 定位一个
<li>
元素后的所有兄弟<li>
元素。 - XPath:
//li/following-sibling::li
- 示例: 定位一个
- 定位同一父级的前面的兄弟元素:
- 示例: 定位一个
<h2>
元素前的所有兄弟<p>
元素。 - XPath:
//h2/preceding-sibling::p
- 示例: 定位一个