test html

<p>title</p>
<ul class="list a" id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<footer>footer</footer>
function xpath(path, parent = document) {
const r = document.evaluate(
path,
parent,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
const len = r.snapshotLength;
const list = [];
for (let i = 0; i < len; i++) list.push(r.snapshotItem(i));
return list;
} const r = xpath(`//ul[contains(@class, 'list')]/li/text()`);
console.log(r);

child

const r = xpath(`//ul[contains(@class, 'list a')]/li`);
for (const i of r)
console.log( xpath("./text()", i) );

跳过列表第一个

// xpath(`//ul/li/text()`).slice(1,Number.MAX_VALUE)
xpath(`//ul/li[position()>1]/text()`)

列表第一个

xpath(`//ul/li[1]/text()`);

列表最后一个

xpath(`//ul/li[last()]/text()`);

第一个和最后一个

xpath(`//ul/li[position()=1 or position()=last()]/text()`)

child slice

xpath(`//ul/li[position()>1 and position()<last()]/text()`) // 2,3

列表过滤

<ul class="list a" id="list">
<li><a href="">1</a></li>
<li>2</li>
<li><a href="">3</a></li>
</ul>
xpath(`//ul/li[./a]/a/text()`) // 1,3

xpath(`//ul/li[not(./a)]/text()`) // 2

列表过滤2

<ul>
<li>1</li>
<li>2</li>
<li>23</li>
<li>332</li>
</ul>
xpath(`//ul/li/text()[contains(., '2')]`) // 2,23,332
xpath(`//ul/li[contains(./text(), '2')]/text()`) // 和上面一样 xpath(`//ul/li/text()[.='2']`) // 2
xpath(`//ul/li[./text()='2']/text()`)// 和上面一样

get attr

xpath(`//ul/@class`)

find id

xpath(`//ul[@id="list"]`);

starts-with

xpath(`//ul[starts-with(@id,'lis')]`);

兄弟元素

<p>title</p>
<ul class="list a" id="list"></ul>
<footer>footer</footer>
xpath(`//ul/preceding::p[1]`)
xpath(`//ul/preceding::*[1]`) xpath(`//ul/following::footer[1]`)
xpath(`//ul/following::*[1]`)

指定后代

<ul class="list a" id="list">
<li><a href="">1</a></li>
<li><a href="">2</a></li>
</ul>
// xpath(`//ul/li/a`)
xpath(`//ul/descendant::a`)

parent

xpath(`//ul/parent::body`)
xpath(`//ul/parent::*`)

See alse:

Xpath in JavaScript的更多相关文章

  1. selenium使用Xpath+CSS+JavaScript+jQuery的定位方法(治疗selenium各种定位不到,点击不了的并发症)

    跟你说,你总是靠那个firebug,chrome的F12啥的右击复制xpath绝对总有一天踩着地雷炸的你死活定位不到,这个时候就需要自己学会动手写xpath,人脑总比电脑聪明,开始把xpath语法给我 ...

  2. Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析

    加速IE浏览器自动化执行效率:Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析 1.技术背景       在Web应用中,用户通过键盘在输入框中输入值和鼠标点击按钮,链 ...

  3. XPath 初步讲解

    2016-05-05 XPath是JavaScript 中节点查找手段,ie9以后的版本才支持w3c标准,其他浏览器基本支持.在e8之前的浏览器,通过基于 activeX的xml dom对象实现. 为 ...

  4. 国内国外最好的java开发论坛及站点 [转]

    国内: www.chinajavaworld.com -论坛人很多,高手也多,不过好像都在潜水    www.cn-java.com -也很不错,文章很好,但是就是商业性浓了点.    www.chi ...

  5. selenium各种定位方法(转)

    selenium使用 Xpath CSS JavaScript jQuery的定位方法 (治疗selenium各种定位不到,点击不了的并发症) 2017年07月28日 22:47:36 阅读数:369 ...

  6. 【Selenium专题】元素定位之一简单定位

    UI自动化工具千变万化.架构千变万化,但都逃离不开的关键一步就是元素定位.下面以Selenium为例介绍常见的几个元素定位方法 ID -元素id属性 WebElement El = driver.fi ...

  7. 浏览器开发者工具Chrome Developer Tool

    开发者工具Chrome Developer Tool https://developers.google.com/chrome-developer-tools/docs/profiles   一直被墙 ...

  8. Web API接口安全了解

    2017版OWASP top 10 将API安全纳入其中,足以说明API被广泛使用且安全问题严重.自己尝试整理一下,但限于本人搬砖经验还不足.水平有限,本文只能算是抛砖引玉,希望大伙不吝赐教. 了解W ...

  9. 第一百二十六节,JavaScript,XPath操作xml节点

    第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...

随机推荐

  1. 服务端渲染 数据驱动 不是渲染后的网页,而是一个由html和Javascript组成的app ssr 隐藏接口服务器

    小结: 1. 服务端渲染主要的工作是把组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序. 服务器给到客户端的已经是 ...

  2. C # 9.0的record

    官方消息: c # 9.0已经过时了!早在五月份,我就在博客中介绍了 c # 9.0计划,下面是该文章的更新版本,以便与我们最终发布的计划相匹配. 对于每一个新的 c # 版本,我们都在努力提高常见编 ...

  3. ThinkPHP 漏洞利用

    ThinkPHP thinkphp_5x_命令执行漏洞 受影响版本包括5.0和5.1版本 docker漏洞环境源码: https://github.com/vulnspy/thinkphp-5.1.2 ...

  4. 利用Java反射机制将Bean转成Map

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  5. DEDECMS:安装百度UEDITOR编辑器

    第一步:下载相对应编辑器的版本 首先,去百度搜索"百度ueditor编辑器",然后点击进入官网,找到下载页面.找到我们想要的编辑器的版本,看自己网站的编码是UTF-8还是GBK,下 ...

  6. cassandra权威指南读书笔记--读写数据

    写cassandra除了轻量级事务,不支持别的事务.cassandra是追加写,写的速度非常快.cassandra还有hint日志,这个数据库总是可写的,而且单个列的写操作是原子的.hint并不是一定 ...

  7. Hive调优相关

    前言 Hive是由Facebook 开源用于解决海量结构化日志的数据统计,是基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL查询功能. 在资源有限的情况下,提 ...

  8. hdu 3974 Assign the task(dfs序上线段树)

    Problem Description There is a company that has N employees(numbered from 1 to N),every employee in ...

  9. hdu5726 GCD(gcd +二分+rmq)

    Problem Description Give you a sequence of N(N≤100,000) integers : a1,...,an(0<ai≤1000,000,000). ...

  10. 2019牛客暑期多校训练营(第三场)B题、H题

    传送门 题意: 就是说给你一个由0或1组成的字符串,让你找出来一个0的数量和1的数量相等的最长子字符串和最长子序列 题解: 可以把0当作-1,把1当作1来计算字符串的前缀和 这样的话,当两个位置的前缀 ...