代码之家  ›  专栏  ›  技术社区  ›  Raptor

casper.start的循环仅执行一次

  •  0
  • Raptor  · 技术社区  · 10 年前

    我使用以下脚本循环页面的选项以获取后续值:

    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循环中的最后一项执行一次。我错过了什么?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Artjom B.    10 年前

    你只能有一个 start - run 每对 casper 例子 开始 重置之前的所有步骤,因此队列中的所有内容都将消失。在里面 startQuery ,你可以改变 casper.start casper.thenOpen 并删除 casper.run 彻底地