我几天来一直遇到这个问题,并且一直在 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/