首页 > 解决方案 > Puppeteer - 如何评估返回文本的 XPath?

问题描述

我正在尝试从以下 Xpath 中获取文本作为字符串:

//*[contains(text(), 'mission')]/following-sibling::text()[1]

我努力了

let elHandle = await page.$x("//*[contains(text(), 'mission')]/following-sibling::text()[1]")

它返回一个ElementHandle<Element>[]. 如何从这里导航到文本字符串?

标签: javascriptnode.jsxpathpuppeteer

解决方案


我假设您的 XPath 是正确的。所以:page.$x返回一个数组(匹配元素:)<Promise<Array<ElementHandle>>>,您需要第一个元素,因此您需要[0]在整个元素句柄表达式之后添加。

它可以与 a 组合page.evaluate来检索innerText字符串。

const elHandleText = await page.evaluate(el => el.innerText, (await page.$x("//*[contains(text(), 'mission')]/following-sibling::text()[1]"))[0])
console.log(elHandleText)

关于是否可以使用 CSS 选择器完成的问题:如果您需要查找具有特定文本内容的元素,这是不可能的,XPath 的contains方法是解决方案。


推荐阅读