我想实现一些代码来捕获链接中的每个图像
但是,如果我运行此代码,那么我只获得最后一个链接的图像。
如何正确获取所有图像?
我发现它与封闭有关,但它也是如此。
var casper = require("casper").create({});
var dst = casper.cli.options["dst"];
var toon_id = casper.cli.options["id"];
var lastno = casper.cli.options["no"];
var no;
for (no=1; no<lastno;no++){
var nox = no;
var uri = 'http://comic.naver.com/webtoon/detail.nhn?titleId=' + toon_id + '&no=' + nox;
(function(m){
casper.start(uri, function() {
var i;
for(i=0;;i++){
var id = '#content_image_' + i;
if( casper.exists(id) == false ) break;
this.captureSelector(m + '_' + i + '.png', id);
}
});
casper.run();
console.log('No '+ m + '. has rendered' );
})(nox);
}
答案 0 :(得分:1)
在脚本中只应使用casper.start()
和casper.run()
,start()
会在每次迭代使用相同的实例时覆盖casper
实例的所有内部数据。此外,CasperJS是异步的,因此您必须使用诸如所有then*()
和wait*()
函数之类的步骤函数来确保上一步完成。
您可以使用thenOpen()
代替start()
;
casper.start();
for (no=1; no<lastno;no++){
var nox = no;
var uri = 'http://comic.naver.com/webtoon/detail.nhn?titleId=' + toon_id + '&no=' + nox;
(function(m){
casper.thenOpen(uri, function() {
var i;
for(i=0;;i++){
var id = '#content_image_' + i;
if( casper.exists(id) == false ) break;
this.captureSelector(m + '_' + i + '.png', id);
}
});
console.log('No '+ m + '. has rendered' );
})(nox);
}
casper.run();
请注意,PhantomJS的渲染效率非常低。最好直接download()
图像而不是制作剪裁的截图。