Casperjs Fill Method使下一个函数仅在前一个函数完成后运行

时间:2014-04-18 12:56:17

标签: javascript casperjs

继承人我的casperjs剧本

var ccommss = require('node_modules/ccomms');
var system = require('system');
var casper = require('casper').create({
    logLevel: "debug",
    waitTimeout: 10,
    stepTimeout: 10,
    verbose: true,
    viewportSize: {
        width: 1280,
        height: 960
    },
    pageSettings: {
        "userAgent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.10 (KHTML, like Gecko) Chrome/23.0.1262.0 Safari/537.10',
        "webSecurityEnabled": false,
        "ignoreSslErrors": true
    },
    onWaitTimeout: function () {
        // casper.capture('./out/wait-timeout:_' + TimeTidy() + '.png');
        // throw new Error stuff;
    },
    onStepTimeout: function () {
        // casper.capture('./out/step-timeout' + TimeTidy() + '.png');
        // throw new Error stuff;
    }
});


var Visit = "https://example.com/login.html";
var use = {};
casper.start(Visit, function () {

    casper.then(function () {
        ccommss.CaptchaGet();
    });

    casper.then(function () {
        ccommss.Login();
        console.log(use.name + " " + use.pass + " " + use.turing);
    });

    casper.then(function () {
        this.echo(this.getCurrentUrl());
    });

});

casper.run();

问题是当我运行ccommss.Login()函数时,我已经构建了以下内容 casper.then statment this.getcurrenturl()在页面重定向

之前运行

继承人是我的职能

exports.Login = function() {

var line = system.stdin.readLine();
    var split = line.split (':');
    casper.fill('form[name="reg"]', {
           'login': split[0],
           'password': split[1],
           'turing': split[2]
        }, false);
casper.click("input#sbt.submit[type='submit']");

return use.name = split[0],
       use.pass = split[1],
       use.turing = split[2];



};

运行时出现问题

    casper.then(function () {
        this.echo(this.getCurrentUrl());
    });

它没用,因为这个功能仍在工作

ccommss.Login();

并且网址更改尚未发生 我知道我可以用somekind的回调修复它可以anybod帮我解决这个问题

1 个答案:

答案 0 :(得分:1)

您将stepTimeout设置为10毫秒。在登录步骤中处理任何事情都没有足够的时间。所以我的猜测是中止登录步骤并执行下一步。默认情况下,脚本为die,但您提供了一个stepTimeout回调,用于禁用die()

解决方法是将超时时间增加到5秒( 5000 )。顺便说一句,waitTimeout也太短了。