【问题标题】:How do I use the XPath substring function in the Chrome inspector?如何在 Chrome 检查器中使用 XPath 子字符串函数?
【发布时间】:2018-11-10 07:31:11
【问题描述】:

如何在 Chrome 检查器中使用XPath substring 函数?我无法在检查器的“元素”选项卡中创建工作示例。

例如这个选择器:

//div[contains(text(),'Man')]

适用于this page,但是

substring(//div[contains(text(),'Man')], 2)

无法选择任何内容。难道不应该继续选择和第一个选择器相同的元素吗?

最终,我将第二个选择器传递给 JavaScript document.evaluate() 函数,以获取 text() 字符串的一部分。截至目前 document.evaluate() 没有为第二个选择器返回任何内容。

PS。我读了this 问题和this 一个,但他们没有提到使用Chrome 检查器。

【问题讨论】:

  • 我试过document.evaluate("substring(//div[contains(text(),'Man')], 2)", document)。工作正常,返回XPathResult {resultType: 2, stringValue: "Managing Partner, Fort Worth Office↵↵", invalidIteratorState: false}
  • 在 Chrome 检查器中怎么样?
  • 是的,inspector(Ctrl+F) 不起作用:(

标签: javascript google-chrome xpath


【解决方案1】:

似乎在 Chrome 检查器中(使用 DOM 中的搜索 - Elements 选项卡)您不能仅突出显示文本或部分文本。

例如,如果您尝试//div[contains(text(),'Man')]/text(),您将突出显示整个 div 元素。

这可以解释为什么substring(//div[contains(text(),'Man')], 2) 不起作用。遗憾的是,我在文档中找不到这方面的信息。

因此,作为替代方案,您可以在控制台中使用 $x(path)Document.evaluate()
例如,
$x("substring(//div[contains(text(),'Man')], 2)")

document.evaluate("substring(//div[contains(text(),'Man')], 2)", document)

【讨论】:

  • 谢谢,但是这些都没有返回部分字符串,所以它们不是解决方案。结果应该是naging 合作伙伴,Fort Worth Office。前两个字符 Ma 应该已被 substring() 删除。
  • 这是因为 div 中的文本是 "↵Managing Partner, Fort Worth Office↵↵"。因此,位置 2substring 返回 "Managing Partner, Fort Worth Office↵↵""
  • 您可以通过normalize-space 消除前导和尾随空格。所以要获得“沃思堡办公室的唠叨伙伴” - 你将使用substring(normalize-space(//div[contains(text(),'Man')]), 3)
  • 谢谢。它有效,所以你已经回答了我的问题。我只是希望我可以让它在 Node.js 中工作。 doc.evaluate() 函数不返回匹配项。
  • 我不知道你在nodejs中使用什么,但是你可以使用jsdom中的evaluate函数或者只使用package specifically for xpath
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2012-05-18
相关资源
最近更新 更多