1.支持层级跳转

2.支持多个属性同时定位唯一值

  • /(开头)  : 表示根路径
  • //(开头、中间): 表示任意层级
  • * :表示任意元素
  • @: 表示根据属性筛选
  • /(中间)  : 表示下一级路径
  • . : 表示本级
  • ..: 表示上一级

定义该元素:<a href="javascript:void(0);">+ 新建选项</a>

根据文本内容精确定位

# 精确匹配
Xpath=//a[text()='+ 新建选项']

根据模糊文本内容定位

# 模糊匹配
Xpath=//a[contains(text(),'新建')]

根据开头文本内容定位元素

# 定位以“新” 开头的元素
Xpath=//a[starts-with(text(),'新')]

根据tagName查找某个元素的父元素(使用 parent::  )

<span>新建选项</span>

//span[contains(text(),'新建')]/parent::li
//span[contains(text(),'新建')]/parent::*

寻找兄弟节点:

preceding-sibling:向上查找

following-sibling:向下查找

//*[@class='demo']/following-sibling::div[1]  --》向下查找第一个兄弟节点 
//*[@class='demo']/preceding-sibling::div[1]  --》向上查找第一个兄弟节点 
                    定义该元素:&amp;lt;a href=&quot;javascript:void(0);&quot;&amp;gt;+ 新建选项&amp;lt;/a&amp;gt;Xpath=//a[text()='+ 新建选项']
  text = get_html(url)
  tree = etree.HTML(text)
  bm = tree.xpath('//ul[@class=information_ul]/li/i[text()=别名:]/following-sibling::span/text()')
 bw = tree.xpath('//ul[@clas
(1)可以通过获取的节点定位到父节点,再找到想要定位元素 用到…来获取   父节点
(2)可以使用xpath提供的属性:preceding-sibling(当前节点之前的节点)或者following-sibling(当前节点之后的节点)属性来进行定位
(1)通过父节点进行定位
//table/tbody/tr[1]/td[1]/div/…/…/td[2]/div    ###先获取到了40140值,在通过…获取到了父值td,再获取td的父值tr,再进行获取子节点
(2)使用prece
在定位页面元素时,有时候需要根据某个元素特征,去定位其相邻元素/兄弟元素,或者定位其父元素兄弟元素(或叔伯元素的子元素)。这里引入xpath的两个定位方法:
preceding-sibling
following-sibling
如图,页面元素A,B,C,假设我不知道B和C的name,只知道A的name,我想根据A的name去其上一个元素的name和下一个元
				
XPath 的 `./` 和 `//` 都是用来定位元素的,二者的区别在于定位的起点不同。 - `./` :表示从当前节点开始查找,即当前节点下的子节点。 - `//` :表示在整个文档查找,即不论当前节点在文档的位置,都会从文档的根节点开始查找。 举个例子,假设我们有以下 HTML 代码: ```html <div id="parent"> <p>第一个段落</p> <p>第二个段落</p> <p>第三个段落</p> 如果我们要定位第一个段落的元素,可以使用以下两种方式: - 使用 `./` : ```xpath ./p[1] 这个 XPath 表达式表示从当前节点(即 `div` 元素)开始查找子节点的第一个 `p` 元素。 - 使用 `//` : ```xpath //p[1] 这个 XPath 表达式表示在整个文档查找第一个 `p` 元素。 因此,二者的区别在于定位的起点不同,使用 `./` 表示从当前节点开始查找,使用 `//` 表示在整个文档查找。