我想实现一些代码以捕获链接中的每个图像。
但是,如果我运行此代码,则只会得到最后一个链接的图像。
如何正确获取所有图像?
我发现它与闭包有关,但它也是如此。
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);
}
最佳答案
您只能在脚本中使用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()
而不是对其进行裁剪的截图可能会更好。关于javascript - 如何使用CasperJS打开多个URL并将多个链接捕获为图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34568237/