Javascript CasperJS:execute evaluate失败,而同一代码在Chrome控制台中成功

Javascript CasperJS:execute evaluate失败,而同一代码在Chrome控制台中成功,javascript,phantomjs,casperjs,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 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不是对象(计算'array.length')

计算返回值的数组似乎为空,但当我在Chrome控制台中执行相同的脚本时,它给出了正确的结果:

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

那么,为什么同样的代码在Chrome中成功,但在我的CasperJS中失败了呢?如何写出正确的答案

如有任何建议,将不胜感激


从:

这种方法背后的概念可能是最难理解的 了解如何发现CasperJS。作为提醒,想想 evaluate()方法作为CasperJS环境和 你打开的一页;每一次你通过一个关闭 evaluate(),您将进入页面并执行代码,就像 使用浏览器控制台


从文档中,它声称如果在Chrome控制台中成功,它将在CasperJS的我的
评估中成功

我觉得不错。a) 你以前有没有拍过截图,看看是否有很多桌子?b) 您使用哪个PhantomJS版本?PhantomJS 1.x有一个与
:nth child
有关的bug,但这可能不会导致您的观察结果。c) 你能展示代码的更大部分吗?d) 请注册到
resource.error
page.error
remote.message
casper.page.onResourceTimeout
事件()。也许有错误。@ArtjomB。真的谢谢!我会逐一核对你的建议…@ArtjomB。我遇到了一个关于
CasperJS
的新问题,你能给我一些建议吗?