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
的新问题,你能给我一些建议吗?