我正在从网站抓取足球比分数据。所有分数都在表格中,每个<tr>
都有“阻止主场比赛17”以及其后的一些独特内容。
我在Chrome开发工具中测试了xpath,它只能识别我需要的表行。
var utils = require('utils');
var casper = require('casper').create();
var xpath = require('casper').selectXPath;
var result = [];
function getScores(){
console.log("getting scores");
result = __utils__.getElementsByXPath("//tr[contains(@id,'block_home_matches_17')");
}
casper.start('http://int.soccerway.com/', function() {
console.log("casper start....");
var l = getScores();
utils.dump(l);
});
casper.run();
代码返回[]作为utils.dump!为什么?我的xpath有效!
最佳答案
您有三个问题:
您只能通过evaluate()
访问沙盒页面上下文中的DOM节点,但是
您不能将DOM节点传递到外部上下文(请阅读PhantomJS documentation)。
clientutils (__utils__
) module仅在页面上下文中可用。
您可以通过CasperJS函数检索目标DOM节点的表示形式:
casper.start('http://int.soccerway.com/', function() {
utils.dump(this.getElementsInfo(xpath("//tr[contains(@id,'block_home_matches_17')")));
});
或直接处理页面上下文中的元素:
casper.start('http://int.soccerway.com/', function() {
utils.dump(this.evaluate(function(){
return __utils__.getElementsByXPath("//tr[contains(@id,'block_home_matches_17')").map(function(el){
return {} // TODO: produce your own representation
});
}));
});