【问题标题】:Puppeteer - How to evaluate XPath which returns text?Puppeteer - 如何评估返回文本的 XPath?
【发布时间】:2020-12-14 17:16:11
【问题描述】:

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

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

我试过了

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

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

【问题讨论】:

  • 另外,是否有一个 CSS 选择器与这个 XPath 做相同或类似的事情?

标签: javascript node.js xpath puppeteer


【解决方案1】:

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

它可以与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 方法是解决方案。

【讨论】:

  • 谢谢!。我会调查 page.evaluate
猜你喜欢
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 2020-10-28
  • 2019-05-23
  • 2020-11-14
  • 2022-01-07
相关资源
最近更新 更多