CasperJS 没有显示模态覆盖

CasperJS is not displaying a modal overlay

我正在为 DraftKings 编写脚本。我需要做的第一件事是登录。

如您所见,右上角有一个登录按钮。单击它时,会显示带有登录框的模态叠加层。

我有一个 CasperJS 脚本,如下所示:

var casper = require('casper').create({
    clientScripts: ["./jquery-2.1.4.min.js"],
    loadImages:false,
    verbose: true,
    logLevel: 'debug'
});

//set browser user agent
casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X)');

//Open URL
casper.start('https://draftkings.com');

casper.thenEvaluate(function() {
    this.clickLabel('Sign-in', 'a');
    //.click('a[data-lp-signin-nav="1"]');
    this.capture('login.png');
});

casper.thenEvaluate(function() {
    //fill form

    //casper.evaluate(function(){
        casper.sendKeys('#Username', "xxxxx");   
        casper.sendKeys('#Password', "xxxxx");
        this.click('a[data-signin-submit="1"]');
        this.capture('screen.png');
    //});
});

casper.run(function() {
    //finish execution script 
    this.exit();
});

我启动该页面,然后我尝试单击登录按钮以显示模态叠加层,但是 login.png 未显示它。

另外请注意,我应该可以在不显示的情况下登录,但是当我这样做时它不会将我重定向到主页,并且当我手动打开主页时我没有登录。

控制台日志没有显示任何错误,我可以看到正在填写表单项并且正在单击按钮。

我是不是遗漏了什么?

你的脚本有很多问题。几乎所有这些都没有做任何事情。

casper.evaluate()casper.thenEvaluate()是进入DOM的大门。它们被沙盒化,无法访问外部功能。 casper 在它们内部不可用,this 指的是 window。我建议您完整阅读文档 casper.evaluate() and page.evaluate()

如果要显示可能的错误,则需要注册到 resource.errorpage.errorremote.messagecasper.page.onResourceTimeout 事件(Example ).

然后就是这个问题,你在点击某些东西后没有等待任何事情发生。点击后立即截图,但您应该将其放入下一步。

进一步完善:

var casper = require('casper').create({
    loadImages:false,
    verbose: true,
    logLevel: 'debug'
});

casper.start('https://draftkings.com');

casper.then(function() {
    this.clickLabel('Sign-in', 'a');
    //.click('a[data-lp-signin-nav="1"]');
});

casper.then(function() {
    this.capture('modal.png');
    this.sendKeys('#Username', "xxxxx");   
    this.sendKeys('#Password', "xxxxx");
    this.click('a[data-signin-submit="1"]');
});

casper.then(function() {
    this.capture('logged_in.png');
});

casper.run();

如果您不使用它并且页面已经有一个版本,请不要包含 jQuery。由于版本之间的不兼容,它可能会破坏页面代码。