Casper.start 的循环只执行一次

Loop for casper.start only executed once

本文关键字:一次 执行 start 循环 Casper      更新时间:2023-09-26

我得到了以下脚本来循环浏览页面的选项以获取后续值:

var casper = require('casper').create();
casper.on('remote.message', function (message) {
    this.echo(message);
});
casper.on( 'page.error', function (msg, trace) {
    this.echo( 'Error: ' + msg, 'ERROR' );
});
casper.start(url, function() {
    this.evaluate(function() {
        // nothing
    });
    this.then(function() {
        ddlArea_options = this.getElementsAttribute('#ddlArea option', 'value');
        for(var i = 0; i < ddlArea_options.length; i++) {
            if(ddlArea_options[i] != '') {
                this.echo(ddlArea_options[i]);
                startQuery('myID', ddlArea_options[i]);
            }
        }
    });
});

其中startQuery(id, val)是一个函数包含casper.start()

function startQuery(id, val) {
    casper.start(url, function() {
        this.echo('startQuery started');
        var obj = {};
        obj['#' + id] = val;
        this.fillSelectors('#form1', obj, true);
        this.evaluate(function() {
            __doPostBack('ddlArea', '');
        });
        this.then(function() {
            this.echo("doPostback complete");
            var values = this.getElementsAttribute('#anotherSelect option', 'value');
            for(var i = 0; i < values.length; i++) {
                this.echo(values[i]);
            }
        });
    });
    casper.run();
}

startQuery()只在 for 循环中的最后一项上执行一次。我错过了什么?

每个casper实例只能有一个start - run对。 start重置之前的所有步骤,因此队列中的所有内容都消失了。在 startQuery 中,您可以将casper.start更改为casper.thenOpen并完全删除casper.run