kur*_*tko 5 javascript xpath node.js web-scraping puppeteer
我正在尝试使用 puppeteer 搜索不区分大小写的内部文本。
我读过这个:case insensitive xpath contains() possible?
例如我有这个元素:
<div>
<span>Test One</span>
<span>Test Two</span>
<span>Test Three</span>
</div>
Run Code Online (Sandbox Code Playgroud)
我尝试过这个但不成功:
const element = await page.$x("//span//text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]");
Run Code Online (Sandbox Code Playgroud)
您的 XPath 表达式是有效的,但您返回的是text()节点本身而不是节点本身。page.$x期望 XPath 返回一个元素,因此您的代码不起作用。要返回节点,您需要查询 span 元素。
const element = await page.$x("//span[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]");
Run Code Online (Sandbox Code Playgroud)
请注意,这只text()适用于纯文本节点。如果您有混合内容(包含元素和文本),则应使用字符串值(.而不是text()):
const element = await page.$x("//span[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]");
Run Code Online (Sandbox Code Playgroud)
为了比较表达式,我将它们放在一起:
//span//text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]
//span[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')
//span[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]
Run Code Online (Sandbox Code Playgroud)
第一个是跨度节点文本的表达式(由您给出)。第二个使用 查询节点本身text()。最后一个使用字符串值来查询节点。
| 归档时间: |
|
| 查看次数: |
2375 次 |
| 最近记录: |