我想实现一些代码以捕获链接中的每个图像。
但是,如果我运行此代码,则只会得到最后一个链接的图像。
如何正确获取所有图像?
我发现它与闭包有关,但它也是如此。

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/

10-12 12:25
查看更多