xpath路径定位
preceding-sibling选择同级层所有节点向前查找
//div[@id='id1']/preceding-sibling::div/a
例如:“更多产”超链接的同级向上数第二个元素,即“登陆”超链接
following-sibling选择同级层所有节点向后查找
//div[@id='id2']/following-sibling::div/input
查找上一父节点..(两点)
//input[@name='name1']/..
动态查找如id=wpf_button_0101或文本包含 搜索01
//input[contains(@id,'wpf_button')]
//a[contains(text(),'搜索')]
多个属性定位表达式
//input[@value='Search'][@type='button']
//input[@value='Search' and @type='button']
XPath匹配含有指定文本的标签---contains的用法 - 暮良文王 - 博客园 (cnblogs.com)
文字没有被一个明确的标签包裹
<div> <ul id="side-menu"> <li class="active"> <a href="#"> <i>DOI</i> 卷期号: <span>xxxx</span> </a> </li> </ul> </div>
再用上边的xpath表达式就到不到了, 不过可以借助string(), 将a标签里边的东西全部转换成字符串, 再用contains判断:
//ul[@id='side-menu']/li/a[contains(string(), '卷期号')]/text()
XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:
1、child 选取当前节点的所有子元素
2、parent 选取当前节点的父节点
3、descendant 选取当前节点的所有后代元素(子、孙等)
4、ancestor 选取当前节点的所有先辈(父、祖父等)
- 举例:查找到对应位置后,向上再定位父、祖父级的元素后,再向下查找。
- //*[@class="step_name"]//*[text()="abc"]/ancestor::*[@class="step_name"]//*[@type="checkbox"]
5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身
6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
7、preceding-sibling 选取当前节点之前的所有同级节点
- 举例:查找到节点后,向上查找同级span标签的元素
- //*[@class="choose_step"]/preceding-sibling::span
8、following-sibling 选取当前节点之后的所有同级节点
- 举例:查找到节点后,向下查找同级li标签的元素
- //*[@class="choose_step"]/following-sibling::li
9、preceding 选取文档中当前节点的开始标签之前的所有节点
10、following 选取文档中当前节点的结束标签之后的所有节点
11、self 选取当前节点
12、attribute 选取当前节点的所有属性
13、namespace 选取当前节点的所有命名空间节点