CasperJS登录表单等待成功

时间:2016-11-19 05:54:46

标签: javascript phantomjs casperjs

我尝试在页面中登录:

var casper = require('casper').create();
casper.start('http://sprashivai.ru/', function() {
    this.click('#signin_link');

    this.capture('foo.jpg', undefined, {
        format: 'jpg',
        quality: 75
    });

    this.fillSelectors('form', {
        '#signin_username' : 'admin@*****',
        '#signin_pass' : '*****'
    }, true);

    casper.then(function() {
        this.capture('foo_2.jpg', undefined, {
            format: 'jpg',
            quality: 75
        });
    });

    casper.thenOpen(function() {
        this.capture('foo_3.jpg', undefined, {
            format: 'jpg',
            quality: 75
        });
    });

    casper.then(function() {
        this.capture('foo_4.jpg', undefined, {
            format: 'jpg',
            quality: 75
        });
    });

    this.waitForSelector("#top_nq_badge",
        function pass () {
            test.pass("Found #top_nq_badge");
        },
        function fail () {
            test.fail("Did not load element #top_nq_badge");
        },
        20000 // timeout limit in milliseconds
    );
});


casper.run();

我知道登录后我可以看到元素#top_nq_badge,但是waitForSelector对我不起作用。 我如何在页面上使用CasperJS登录?

我运行脚本: $ casperjs secr.js 它没有打印,脚本成功没有错误。

foo_3.jpg和foo_4.jpg文件不是由脚本创建的。 但我的foo.jpg和foo_2.jpg截图:

foo.jpg

foo_2.jpg

1 个答案:

答案 0 :(得分:1)

没有test变量,要捕获有关它的错误,您需要使用.on('error'回调,加载选择器#top_nq_badge的速度非常慢。

var casper = require('casper').create({
    verbose: true,
    logLevel: 'debug',
    waitTimeout: 5000,
    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4',
    viewportSize:{width: 1600, height: 900}
})
.on('error', function(msg) {
    this.echo('Error: ' + msg, "ERROR");
})
.on('remote.message', function(msg) {this.echo('The error from evaluate: ' + msg, "ERROR");})
.start('http://sprashivai.ru/', function() {
    this
    .click('#signin_link');
    this.wait(0,function(){var i=0;
    function snap(){i++;casper.capture('foo_'+i+'.jpg', undefined,{format: 'jpg',quality: 75});if(i<4){setTimeout(snap,1000)}}snap();
    })
    .fillSelectors('form', {
        '#signin_username' : '<login_here>',
        '#signin_pass' : '<pass_here>'
    }, true)
    .waitForSelector("#top_nq_badge",
    function success() {
        this
            .echo('logged in!', 'INFO')
            .capture('in.png')
    },
    function fail(){
        this
            .capture('failed.png')
            .echo('failed to login', 'ERROR');
    })
})
.run()