一个 XPath 选择器库,快速获取节点数据
אין להתקין סקריפט זה ישירות. זוהי ספריה עבור סקריפטים אחרים // @require https://update.greasyfork.org/scripts/559142/1715329/xpath-selector.js
一个 XPath 选择器库,快速获取节点数据
// @require https://**/xpath-selector.js?*
Options 参数说明:
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
expression |
string | 是 | 要获取的节点的 XPath 表达式 | |
returnType |
string | 是 | 获取结果的类型,可选值:string、strings、number、numbers、boolean、nodes、first-node、map、array、all-results |
|
node |
Node | 否 | document |
要搜索的节点 |
<!DOCTYPE html>
<html lang="en" charset="UTF-8">
<head>
<title>hello world</title>
</head>
<body>
<p>hello</p>
<p>world</p>
<a href="#">hello</a>
<a href="#">world</a>
<section>
<!-- section内容 -->
</section>
</body>
</html>
获取 title 节点的文本内容
const title = xpathSelector({
expression: '//title/text()',
returnType: 'string'
})
console.log(title) // hello world
获取所有 p 节点的文本内容
const pList = xpathSelector({
expression: '//p/text()',
returnType: 'strings'
})
console.log(pList) // ['hello', 'world']
统计所有 a 节点的个数
const aCount = xpathSelector({
expression: 'count(//a)',
returnType: 'number'
})
console.log(aCount) // 2
判断是否存在 section 节点
const hasSection = xpathSelector({
expression: 'boolean(//section)',
returnType: 'boolean'
})
console.log(hasSection) // true
获取全部的 a 节点
const aList = xpathSelector({
expression: '//a',
returnType: 'nodes'
})
console.log(aList) // [<a>hello</a>, <a>world</a>]
获取第一个 a 节点
const firstA = xpathSelector({
expression: '//a',
returnType: 'first-node'
})
console.log(firstA) // <a>hello</a>
获取 html 节点的全部属性
const htmlAttributes = xpathSelector({
expression: `map:merge(
for $attr in //html/@*
return map:entry(local-name($attr), string($attr))
)`,
returnType: 'map'
})
console.log(htmlAttributes) // {lang: "en", charset: "UTF-8"}
获取自定义 html 节点的 title 节点的文本内容
const customHtmlTitle = xpathSelector({
expression: '//title/text()',
node: new DOMParser().parseFromString('<html><title>Hello</title></html>', 'text/html'),
returnType: 'string',
})
console.log(customHtmlTitle) // Hello
GreasyFork 或者 ScriptCat 回复不及时,问题反馈推荐直接在 Github 提 Issue。
如果觉得本脚本对你有帮助,欢迎点个 ⭐ Star 支持一下!