Javascript 在Chrome中计算xpath表达式
我正在尝试从此页的表中提取几行 使用xpath表达式和javascript。 我可以将整个页面显示为弹出窗口,但无法使用document.evaluate()计算xpath表达式; 尝试使用XPathResultType,但没有结果。 有人能帮忙吗 这是我的背景页: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() {
<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)