Cómo decirle a CasperJS que recorra una serie de páginas

Intento hacer que CasperJS logre lo siguiente:

Ir a través de una serie de páginas que se nombran secuencialmente por fecha.En cada página, busque un enlace PDF.Descargue el PDF.

Obtuve un código de trabajo, pero no entiendo cómo CasperJS está pasando por la secuencia de eventos.

Por ejemplo, en el ejemplo de código a continuación, CasperJS intenta procesar el paso 2 y arroja un "Error de referencia: no se puede encontrar la variable: formDate", mientras que el paso 1 no se ejecuta en absoluto por alguna razón.

¿Qué hay de malo en mi razonamiento?

Me parece que elwhile el bucle se ejecuta a una velocidad diferente a lacasper.then métodos

casper.start();

casper.thenOpen('http://www.example.com', function() {
    this.echo(this.getTitle());
});

casper.then(function() {

    var start = new Date('2013-01-01T00:00:00');
    var end = new Date('2013-01-31T00:00:00');

    while(start < end) {

          // step 1: define formDate  
          casper.then(function() {
            var formDate = start.getFullYear()+"-"+("0" + (start.getMonth() + 1)).slice(-2) +"-"+("0" + start.getDate()).slice(-2) ;
            casper.echo(formDate);

          });

          // Step 2: open the page and download the file
          casper.thenOpen('http://www.example.com/' + formDate, function() {

                        var url = this.getElementAttribute('div#pdffulllink a.pdf', 'href');
                        this.echo(url);
                        this.download(url, 'Downloaded_' + formDate + '.pdf');

          });

          casper.then(function() {
          // Step 3: redefine start
            var newDate = start.setDate(start.getDate() + 1);
            start = new Date(newDate);

          });

    }

});


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

Respuestas a la pregunta(1)

Su respuesta a la pregunta