CasperJS getElementsByXPath只返回第一个元素

时间:2012-11-16 10:21:09

标签: javascript casperjs

我使用以下代码获取第一个表行中的所有表格单元格。我想检查每个表格单元格的innerHTML。但是在此函数返回的对象中,只有第一个表格单元格实际存在,所有其他属性都为null:

firstRow = this.evaluate(function () {
    return __utils__.getElementsByXPath('//tbody/tr[1]/td');
});

utils.dump(firstRow);

utils.dump的输出是:

[
    {
        "abbr": "",
        "align": "",
        "attributes": {...}
    },
    null,
    null,
    null
]

我也试过 utils .findAll,它也是一样的。如何获得所有匹配的元素?

1 个答案:

答案 0 :(得分:4)

使用Casper / PhantomJS evaluate()函数,您必须将本机DOM元素和元素列表映射到JSON可序列化的东西:

var firstRow = this.evaluate(function () {
    var elements = __utils__.getElementsByXPath('//tbody/tr[1]/td');
    return [].map.call(elements, function(element) {
        return element.outerHTML;
    });
});

utils.dump(firstRow);