我正在尝试从此页面中的表格中提取几行http://www.money.pl/pieniadze/ 使用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>
这是弹出页面:
<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>
答案 0 :(得分:3)
您不能在普通字符串上使用XPath。您必须先将字符串转换为文档。例如,使用DOMParser
。目前的浏览器还不支持text/html
。要使其生效,您必须包含指定at this answer的代码:
var bgWholePage = new DOMParser().parseFromString(bg.wholePage, 'text/html');
document.evaluate( EurPlnPath, bgWholePage, ...
如果您要在后台页面解析文档,请使用bg.document.evaluate
代替document.evaluate
:
var oneTopic = bg.document.evaluate( EurPlnPath, bg.wholePage, null, XPathResult.ANY_TYPE, null)
答案 1 :(得分:2)
尝试document.querySelector("tr#tabr_eurpln")
而不是document.evaluate,这将返回一个DOM元素,对应于选择器。