Javascript 在Chrome中计算xpath表达式

Javascript 在Chrome中计算xpath表达式,javascript,google-chrome,xpath,google-chrome-extension,document.evaluate,Javascript,Google Chrome,Xpath,Google Chrome Extension,Document.evaluate,我正在尝试从此页的表中提取几行 使用xpath表达式和javascript。 我可以将整个页面显示为弹出窗口,但无法使用document.evaluate()计算xpath表达式; 尝试使用XPathResultType,但没有结果。 有人能帮忙吗 这是我的背景页: <html><head><script> ... var wholePage; setInterval(fetch, 20000); function fetch() {

我正在尝试从此页的表中提取几行 使用xpath表达式和javascript。 我可以将整个页面显示为弹出窗口,但无法使用document.evaluate()计算xpath表达式; 尝试使用XPathResultType,但没有结果。 有人能帮忙吗

这是我的背景页:

<html><head><script>
...
var wholePage;
setInterval(fetch, 20000);


    function fetch()
    {
        req = new XMLHttpRequest();
        var url = "http://www.money.pl/pieniadze/";
        req.open("GET", url);
        req.onload = process;
        req.send();
    }   

    function process()
    {
        wholePage = req.responseText;
    }
</script></head></html>

...
var wholePage;
设置间隔(fetch,20000);
函数fetch()
{
req=新的XMLHttpRequest();
变量url=”http://www.money.pl/pieniadze/";
请求打开(“获取”,url);
req.onload=过程;
请求发送();
}   
函数过程()
{
wholePage=req.responseText;
}
这是弹出页面:

<html><head><script>
...
    onload = setTimeout(extract, 0); 

        function extract()  
        {
            chrome.browserAction.setBadgeText({text: ''});
            var bg = chrome.extension.getBackgroundPage();
            var EurPlnPath = "//tr[@id='tabr_eurpln']";
            var tempDiv = document.getElementById('current');
            tempDiv.innerHTML = bg.wholePage;
            var oneTopic = document.evaluate( EurPlnPath, bg.wholePage, null, XPathResult.ANY_TYPE, null)
            var res = oneTopic.iterateNext();
        }

</script></head>
<body>
<div id="current">
</div>
</body>
</html>

...
onload=setTimeout(提取,0);
函数提取()
{
chrome.browserAction.setBadgeText({text:'});
var bg=chrome.extension.getBackgroundPage();
var EurPlnPath=“//tr[@id='tabr_eurplant']”;
var tempDiv=document.getElementById('current');
tempDiv.innerHTML=bg.wholePage;
var oneTopic=document.evaluate(EurPlnPath,bg.wholePage,null,XPathResult.ANY_类型,null)
var res=oneTopic.iterateNext();
}

尝试
document.querySelector(“tr#tabr_eurplant”)
而不是document.evaluate,这将返回与选择器相对应的DOM元素。

您不能在普通字符串上使用XPath。您必须首先将字符串转换为文档。例如,使用
DOMParser
。当前浏览器尚不支持
text/html
。要使其正常工作,必须包含指定的代码:

如果要在后台页面解析文档,请使用
bg.document.evaluate
而不是
document.evaluate

var oneTopic = bg.document.evaluate( EurPlnPath, bg.wholePage, null, XPathResult.ANY_TYPE, null)

不要使用
querySelector all
,而是使用
querySelector
。ID必须是唯一的,因此可以确保选择只返回一个元素
querySelector
远比XPath重要,因此这个答案包含了一个很好的建议。但是,这种方法不能处理普通字符串,请参见我的答案。Rob是对的,如果这几行有一个属性,可以明确地选择它们,那么最好将querySelectorAll与这些属性一起使用。然后您将立即获得此类元素的列表。
var oneTopic = bg.document.evaluate( EurPlnPath, bg.wholePage, null, XPathResult.ANY_TYPE, null)