一晚上做了一个xpath终结者:xpath-helper-plus

简介: 作为一个资深『xpath』提取工程师,想要快速从页面中拿到数据,肯定需要借助一些工具,而最初接触的就是`xpath-helper`这块浏览器插件。使用一段时间后,发现笔者有一些特别的需求,想在此基础上扩展一下。于是乎就学习了如何开发chrome插件?如何使用自己属性的vue来开发?经过双休一顿文档、gayhub了解之后,有了这样一款工具。

前言


作为一个资深『xpath』提取工程师,想要快速从页面中拿到数据,肯定需要借助一些工具,

而最初接触的就是`xpath-helper`这块浏览器插件。使用一段时间后,发现笔者有一些特别的需求,想在此基础上扩展一下。

于是乎就学习了如何开发chrome插件?如何使用自己属性的vue来开发?经过双休一顿文档、gayhub了解之后,有了这样一款工具。


问题


xpath-helper2.0.2原生是支持按住shift后通过鼠标来定位选择元素,并输出xpath语法,但是这种方式出来的xptah语法并不友好。


比如说我想拾取掘金的某个文章标题:


/html/body/div[@id='__nuxt']/div[@id='__layout']/div[@id='juejin']/div[@class='view-container container']/main[@class='container main-container with-view-nav']/div[@class='view timeline-index-view']/div[@class='timeline-container']/div[@class='timeline-content']/aside[@class='index-aside aside']/div[@class='signin-tip signin']/div[@class='first-line']/button[@class='btn signin-btn']/span[@class='btn-text']


它出来了一个xpath语法,这个xpath语法是从DOM根节点开始逐一向下(源码是从下至上)来拼接的。这样就会变成十分地冗余。

虽然它的确能够精准定位到我们想要的元素,但是一旦把这样的xpath语法复制到代码里,是十分可怕的。


当然还有一部分程序员热衷于选择使用chrome原生的元素复制成xpath。




出来的结果是:


//*[@id="juejin"]/div[1]/main/div/div/div/aside/div[1]/div[1]/button/span


显然以上两种方案都有其问题:语法冗余、毫无可读性。


解决


笔者给出的解决方案是在xpath-helper基础上,增加一个辅助功能,它可以最大化精简xpath语法,一旦发现其语法能够识别到该元素就不再继续往上查找。而是立刻返回。



//span[@class='btn-text']


并且它也可以友好的转为css选择器语法:

span.btn-text


我们可以在chrome的元素中检查这个语法:


  • xpath:

  • css:



实现


xpath-helper-plus其核心API均来自于xpath-helper。


笔者在此基础上增加了一些额外的功能,比如:精简xpath语句、转化CSS选择器。


与原有的xpath helper不同的是,这次chrome插件采用Vue3+vite来开发,面向组件,通过vite打包成chrome插件规范的文件目录结构。

未来可能会提供更多的功能。或者在此基础上开发其他插件。


开源

https://github.com/mic1on/xpath-helper-plus



目录
相关文章
|
4月前
|
存储 IDE 开发工具
来咯,他来咯 看GitHub Codespaces 如何帮助缩短开发设置时间
来咯,他来咯 看GitHub Codespaces 如何帮助缩短开发设置时间
119 0
|
9月前
|
Dubbo Java 中间件
探寻源码宝藏:介绍开源项目"source-code-hunter"
最近处于金三银四的面试黄金期,许多同学在面试中反映现在要求非常高,阅读源码几乎是必问项。然而,阅读源码时常常觉得晦涩难懂,令人头疼。今天在浏览 GitHub 时,我发现了一个名为 source-code-hunter 的宝藏项目。这个项目从源码层面深入剖析和挖掘互联网行业主流技术的底层实现原理,为广大开发者提供了便利,助其提升技术深度。目前该项目已经涵盖了 Spring 全家桶、Mybatis、Netty、Dubbo 框架,以及 Redis、Tomcat 等中间件的内容,恰好适合最近正在面试或希望提升技术深度的同学参考学习。
798 1
探寻源码宝藏:介绍开源项目"source-code-hunter"
|
9月前
|
SQL 分布式计算 Spark
Spark3.x的Cache能不能让我在2022好好睡觉
Spark3.x的Cache能不能让我在2022好好睡觉
54 0
|
JavaScript 前端开发 API
每个 Bug 都值得认真对待:分享一个 debug 的案例,推荐给前端实习生参考
每个 Bug 都值得认真对待:分享一个 debug 的案例,推荐给前端实习生参考
324 0
|
JavaScript 前端开发 Linux
2022 我用 MacBook Pro 整一年 【感想 与 踩坑指南】
2022 我用 MacBook Pro 整一年 【感想 与 踩坑指南】
264 0
|
运维 JavaScript 前端开发
鸽了 3 年的 Egg 3.0 带来了一个好消息!
鸽了 3 年的 Egg 3.0 带来了一个好消息!
271 0
|
机器学习/深度学习 算法 编译器
明天省赛,我都还不太熟悉Dev - C++,怎么切换成C++11了?它的报错看不懂呀,那花八分钟看看这篇文章吧~解决你的困惑。
明天省赛,我都还不太熟悉Dev - C++,怎么切换成C++11了?它的报错看不懂呀,那花八分钟看看这篇文章吧~解决你的困惑。
1490 0
明天省赛,我都还不太熟悉Dev - C++,怎么切换成C++11了?它的报错看不懂呀,那花八分钟看看这篇文章吧~解决你的困惑。
|
IDE 开发工具 Python
学了半天,import 到底在干啥?
Python凭什么就那么好用呢? 毫无疑问,大量现成又好用的内置/第三方库功不可没。 那我们是怎么使用它们的呢? 噢,对了~是用的import xxx这个语句。 之所以会有此一问,也是之前有一次使用PyCharm进行开发时(又)踩了个坑……
179 0
学了半天,import 到底在干啥?
|
IDE 小程序 算法
不看后悔系列:Airtest干货教程汇总,赶紧mark起来!
不看后悔系列:Airtest干货教程汇总,赶紧mark起来!
1482 0
|
程序员
[爱偷懒的程序员系列]-Section 1. “懒”是一切需求的根源
一直认为“懒”推进了科技的发展,因为“懒”而促生了各种各样的需求。科技的进步加速了各种信息的交互频率,站在台面上说是因为业务需要提高效率,成本需要降低,服务需要更好。
174 0