CasperJS:执行评估失败,而相同的代码在Chrome控制台中成功

时间:2016-03-28 02:56:08

标签: javascript phantomjs casperjs

代码:

var array = casper.evaluate(function () {
    var nodes = document.querySelectorAll('#J_bought_main > div > div:nth-child(4) > div:nth-child(3) > div > div');
    return Array.prototype.map.call(nodes, function extractOrder(x) {
        var textNode = x.querySelector('table:nth-child(2) > tbody > tr:nth-child(2) > td:nth-child(5) > div > p:nth-child(2)');
        var urlNode =  x.querySelector('table:nth-child(2) > tbody > tr:nth-child(2) > td:nth-child(6) > div > div:nth-child(2) > div:nth-child(1) > span > a');
        return {
            'text': textNode != null ? textNode.textContent : "",
            'url': urlNode != null ? urlNode['href'] : ""
        };
    });
});

casper.echo(array.length);

当我执行时,它始终以TypeError: null is not an object (evaluating 'array.length')失败。

评估返回的数组似乎是null,但是当我在Chrome控制台中执行相同的脚本时,它会给出正确的结果:

enter image description here

(有一些汉字,但没关系)

那么为什么相同的代码在Chrome中成功但在我的CasperJS评估中失败?怎么写一个正确的?

任何建议都将受到赞赏。

来自doc

  

这种方法背后的概念可能是最难的   在发现CasperJS时了解。提醒一下,想一想   evaluate()方法作为CasperJS环境和之间的门   你打开的一个页面;每次你把关闭传递给   evaluate(),您正在进入页面并执行代码,就像您一样   使用浏览器控制台

如果它在Chrome控制台中取得成功,它会声称它会在我的evaluate CasperJS中成功...

0 个答案:

没有答案