我正在从网站抓取足球比分数据。所有分数都在表格中,每个<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
        });
    }));
});

10-06 01:16