How to tell CasperJS to loop through a series of pages

ε祈祈猫儿з 提交于 2019-11-30 03:48:21
Manu

After some research, I found a solution to this problem.

The issue is caused by casper.thenOpen being an asynchronous process, and the rest of the javascript being synchronous.

I applied an elegant method found in this thread (Asynchronous Process inside a javascript for loop).

Following that method, here is an example that works with CasperJS:

var casper = require('casper').create({
    pageSettings: {
        webSecurityEnabled: false
    }
});

casper.start();

casper.then(function() {
    var current = 1;
    var end = 4;

    for (;current < end;) {

      (function(cntr) {
        casper.thenOpen('http://example.com/page-' + cntr +'.html', function() {
              this.echo('casper.async: '+cntr);
              // here we can download stuff
        });
      })(current);

      current++;

    }

});

casper.run(function() {
    this.echo('Done.').exit();
});

This example will output the following:

casper.async: 1
casper.async: 2
casper.async: 3
Done.

The loop is working! :)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!