javascript - 尝试使用自定义 Firefox 扩展/附加组件中的 xpath 和 javascript 引用页面内的文本失败

标签 javascript dom xpath firefox-addon

我几天来一直遇到这个问题,并且一直在 StackOverflow 和 Google 上搜索答案。这是 Firefox 扩展中的代码,我引用了网页上的标签/文本。我试图从<b></b>中间获取文本标签。该测试位于文档深处,因此我想我也许可以使用 xpath 来引用它。我一直在尝试使用 document.evaluate 函数来引用它,但没有成功。这是我最近尝试过的代码片段:

var result = document.evaluate( '//*[@id="page"]/table[3]/tbody/tr/td[3]/table[1]/tbody/tr[9]/td[2]/b', document, null, XPathResult.STRING_TYPE, null );
alert( 'Value: ' + result.stringvalue );

我是 DOM 和 xpath 的新手,所以请让我知道这是否至少在正确的轨道上。我也尝试过其他方法,但收效甚微。我试图从中提取出来的 HTML 代码如下所示:

.
. Rest of the source
.
<b>This is title number 8955592</b>
.
.

我从 chrome 检查元素功能中获取了 xpath。我也尝试过使用 firebug 看看里面的东西是否也有帮助。

X 路径:

//*[@id="page"]/table[3]/tbody/tr/td[3]/table[1]/tbody/tr[9]/td[2]/b

CSS路径:

#page > table:nth-child(3) > tbody > tr > td:nth-child(3) > table:nth-child(3) > tbody > tr:nth-child(9) > td:nth-child(2) > b

我希望我的 xpath 字符串中有一个简单的格式错误,我只是错误地开始了字符串。同样的问题迫使我停止了我正在从事的另一个项目,所以我决定这次我会尝试并实际解决它。我必须再次强调这是我正在开发的 Firefox 扩展的一部分。我还研究了节点作为实现此目的的一种方法,但这很快就变得复杂了。非常感谢任何帮助。

最佳答案

首先,你有

result.stringvalue

应该是

result.stringValue

(大写 V)。但是,这应该会引发错误。我假设您已经检查了控制台是否有错误?

如果没有看到您尝试从中提取数据的页面,就很难说出了什么问题。但您可以按如下方式缩小范围:

var result = document.evaluate(
  '//*[@id="page"]', // /table[3]/tbody/tr/td[3]/table[1]/tbody/tr[9]/td[2]/b',
  document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );

我所做的只是获取 XPath 表达式的第一部分,并暂时注释掉其余部分。我还要求提供节点结果类型。然后查看返回了多少个节点:

console.log(result.snapshotLength); // or alert() if you prefer

如果 //*[@id="page"] 表达式产生 1 个或多个结果,则扩展该表达式并重试:

 var result = document.evaluate(
  '//*[@id="page"]/table[3]', // /tbody/tr/td[3]/table[1]/tbody/tr[9]/td[2]/b',
  document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );

并再次检查 result.snapshotLength。 当 snapshotLength 为零时,这就是 XPath 失败的地方。这应该可以帮助您找出原因。但如果您无法弄清楚原因,请向我们展示这些结果,我们会看看是否可以提供帮助。

关于javascript - 尝试使用自定义 Firefox 扩展/附加组件中的 xpath 和 javascript 引用页面内的文本失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25901763/

相关文章:

javascript - 如何在不使用 javascript 交换表行的情况下交换表行中的表单值?

selenium - 如何使用not contains来查找不包含某些图像的特定div

javascript - 一段时间后, Node Redis 抛出读取 ETIMEDOUT 错误

javascript - 如何让 pickadate.js 与 JAWS 屏幕阅读器配合使用?

javascript - 有没有一种将 JavaScript 对象附加到 HTML 元素的好方法?

JavaScript:构造函数可以创建 documentElement 对象吗?

ruby-on-rails - XPath:仅包含特定字符串的选择节点

xpath - selenium 查找 child 的子元素

javascript -\u001b[1G\u001b[2K> 是什么意思?

javascript - 不允许在 JavaScript 计算器上进行正确算术运算的代码