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.error
、page.error
、remote.message
和 casper.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。由于版本之间的不兼容,它可能会破坏页面代码。
我正在为 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.error
、page.error
、remote.message
和 casper.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。由于版本之间的不兼容,它可能会破坏页面代码。