# 5种常用的XPath元素定位（相对路径）

*Published:* 2023-11-16
*Author:* 客服001

#### 温馨提醒

如果文章内容或图片资源失效，请留言反馈，我们会及时处理，谢谢

本文最后更新于2023年11月16日，已超过 180天没有更新



一、XPath定位
---------

定位说明//ul/\*ul的所有子元素//input\[2\]第2个input元素//input\[last()最后一个input元素input\[position()&lt; 3\]前2个input元素//input\[@value\]有value属性的input元素//input\[@name=‘password’ and @pwd=‘123456’\]属性name的值等于password并且属性pwd的值等于123456的input元素//ul/\*\[5\]ul的第五个子元素//\*\[text()=‘Heading’任意包含Heading文本的元素//input\[@\*=‘SYS123456’\]任意属性的值为SYS1234561、find\_element\_by\_[xpath](https://www.xarjtc.com/tag/xpath "查看xpath此标签更多文章")("//input\[@id='input'\]") #@后跟属性，可以是任何属性语法：//标签名\[@属性名=属性值\]1、使用标签名+节点属性定位

[![](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020454414755.jpg)](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020454414755.jpg)

2、组合元素索引（下标）定位

```
find_element_by_xpath("//*[@id='J_login_form']/*/*/input[2]")
```

[![](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020472134807.jpg)](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020472134807.jpg)

3、通过部分属性值匹配

```
语法：//标签名[contains（@属性名，部分属性值）]、//标签名[starts-with（@属性名，部分属性值）]、//标签名[ends-with（@属性名，部分属性值）]
a.starts-with      例子： //input[starts-with(@id,'ctrl')]      解析：匹配以 ctrl开始的属性值
b.ends-with        例子：//input[ends-with(@id,'_userName')]    解析：匹配以 userName 结尾的属性值
c.contains()       例子：//input[contains(@id,'userName')]      解析：匹配含有 userName 属性值
```

[![](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020484200981.jpg)](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020484200981.jpg)

4、使用文本内容匹配

```
函数：text()
语法：文本全部匹配：//标签名[text()=文本内容]
```

文本部分匹配-包含：//标签名\[contains(text(),部分文本内容)\]

```
driver.find_element_by_xpath("//a[text()="退出"]")` #文本全部匹配
driver.find_element_by_xpath("//a[contains(text(),"出")])` #文本部分匹配
```

5、使用轴定位表达式

```
* ancestor：祖先节点，包括父节点
* parent：父节点
* child：子节点
* descendant：所有后代（儿子、孙子、曾孙子...）
* preceding：当前元素节点标签之前的所有节点（HTML页面之前的）
* preceding-sibling：当前元素节点标签之前的所有兄弟节点（同级）
* following：当前元素节点标签之后的所有节点
* following-sibling：当前元素节点标签之后的所有兄弟节点（同级）
* 使用语法：轴名称::节点名称前后的定位与之前一致，用/隔开即可
* //div//table/td/preceding::td/following-sibling::a//[contains(text(),"课程")] #表示//div//table/td/路径前所有节点中找到节点名称为td的节点，向下同级下的一个兄弟节点包含文本课程。
```

二、XPath定位验证
-----------

1、验证XPath定位元素是否正确，可以在Google Chrome的elements或console中进行验证

在需要定位的页面，按F12后，切换至elements列下，按下Ctrl+f键，输入XPath表达式

[![](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020532121402.jpg)](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020532121402.jpg)

1、在需要定位的页面，按F12后，切换至console列下，输入表达式。语法是：$x("your\_xpath\_selector")

[![](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020563117684.jpg)](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020563117684.jpg)

2、表达式正确，元素定位正确时，会查找出该元素，如下图：

[![](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020571787354.jpg)](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020571787354.jpg)

3、未定位准确，找不到该元素，查找结果为空，如图：

[![](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020577552527.jpg)](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020577552527.jpg)

4、表达式不正确，无法正常识别情况，可能会有很多种错误，列举一个例子，如图：

[![](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020584207044.jpg)](https://www.xarjtc.com/wp-content/uploads/2023/11/1648020584207044.jpg)

原因：语法中括号里需要通过双引号括起来，如果XPath语句中有双引号，要改成单引号，不然只能解析到第一对双引号的内容。这也是需要特别注意的一点。