更多关于Selenium的知识请访问“兰亭序咖啡”的专栏:
专栏《Selenium 从入门到精通》
文章目录
前言
如何定位一个XML(尤其是HTML)中的一个节点?前文我们学习了Selenium的常用的几种选择器,相比其它几种比较简单的比如id选择器、name选择器等外,最强大也是我们使用最频繁的是xpath选择器。
本文,我们就对xpath进行全面的学习。
一、什么是xpath?
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。(简单说就是在一个庞大复杂的XML中找到一个特定节点)
而我们的 HTML 就是一种特殊的XML。所以 XPath 当然也可以用来对 HTML 元素和属性进行遍历。
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。
/html/body/div[1]/div[2]/div[1]/input
这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
/usr/local/apache/log/
二、XPath 节点
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及根节点。
下面我们对每种节点介绍。
XPath 是对 XML 的操作,但是我们用得比较多的是 HTML,所以下面的代码都会以 HTML 来演示。
<html xmlns:example="http://www.example.com">
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<!-- 测试 HTML -->
<h1 name="header">我的第一个标题</h1>
<p>我的第一个段落。</p>
</body>
</html>
对于上面的代码:
- <html> 就是根节点
- 每个标签都是一个元素,比如:<h1>我的第一个标题</h1>
- <h1 name="header">中的name=“header”就是一个属性
- <p>我的第一个段落。</p> 中的“我的第一个段落。”就是文本
- <html xmlns:example="http://www.example.com">中的namespace就是命名空间
- <!-- 测试 HTML -->就是一个注释
- 处理指令一般不怎么常用,如果在Vue中<div v-if="show">会比较常见。
特别注意:节点和元素的区别:
- 节点是很广泛的概念,包括了元素、属性、文本、命名空间、处理指令、注释以及根节点
- 元素只是节点的一种,属性也是一种节点,元素通常是html标签对!
- 后面会介绍 * 表示所有元素,而node()表示任意节点。
三. 节点的关系
人和人之间有关系,比如父子,兄弟等,节点同样有这些关系。
这些关系可以帮我们定位一个节点。
1. 父(Parent)
每个元素都只有一个父节点。
- coffe的父节点是list
- list的父节点是drink
但是注意:coffe只有一个父节点,drink不是coffe的父节点。
<div class="food">
<div class="drink">
<ol class="list">
<li item="coffe">Coffee</li>
<li item="tea">Tea</li>
<li item="milk">Milk</li>
</ol>
</div>
</div>
2. 子(Children)
每个节点都有零个、一个或多个子节点。
- food的子节点是drink
- list的子节点有3个,分别是coffe、tea和milk
- coffe没有子节点
特别注意:coffe不是food和drink的子节点。
<div class="food">
<div class="drink">
<ol class="list">
<li item="coffe">Coffee</li>
<li item="tea">Tea</li>
<li item="milk">Milk</li>
</ol>
</div>
</div>
3. 同胞(Sibling)
拥有相同父节点的节点。
- coffe、tea、milk他们的父节点都是listÿ