为啥 sendKeys() 在 casperJS 中无法正常运行

Posted

技术标签:

【中文标题】为啥 sendKeys() 在 casperJS 中无法正常运行【英文标题】:Why is sendKeys() not functioning properly in casperJS为什么 sendKeys() 在 casperJS 中无法正常运行 【发布时间】:2016-02-12 01:43:28 【问题描述】:

我正在编写一个自动化脚本来登录 Draftkings.com。我正在使用 sendKeys() 将我的登录凭据添加到必填字段。 sendKeys() 的第一个用途是用于 ID 为“用户名”的用户名字段。这实际上会将我的用户名放入该字段。第二种用途是用于 ID 为“Password”的密码字段。但是,这会将此字段的所需文本放入用户名字段中。我错过了什么吗?

var casper = require('casper').create(
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.then(function() 
    this.clickLabel('Sign-in', 'a');
);

casper.then(function() 
    this.sendKeys('#Username', 'xxxx');
    this.sendKeys('#Password', 'xxxx');
    this.click('a[data-signin-submit="1"]');

);

casper.then(function() 
    this.capture('test67_failed.png');
);
casper.run();

更新:

我无法弄清楚为什么sendKeys 无法正常工作。我最终只使用this.evaluate() 将值输入到带有document.querySelector() 的字段中。

新问题:

我可以在控制台输出中看到 'a[data-signin-submit="1"]' 正在被单击并且 http 请求正在被发送,但它实际上并没有记录我。我使用的是 phantomJS 2.0.0,所以虽然我已经尝试过了,但这不是 ssl 问题。如果我的凭据是捕获将表明这一点。

【问题讨论】:

登录后可能需要使用casper.wait(5000, function()/*capture*/); 试过了。不知道发生了什么。将继续深入研究它 如果您选择使用无效凭据提交,您是否会捕获一个红色框,上面写着“密码必须至少包含一个字母和一个数字,并且长度为 5-20 个字符。”我不能,所以我认为登录按钮上的 click() 有问题 【参考方案1】:

this.click() 中提供的输入可能有问题,请尝试使用 xpath 代替

this.click(x('your xpath here'));

【讨论】:

以上是关于为啥 sendKeys() 在 casperJS 中无法正常运行的主要内容,如果未能解决你的问题,请参考以下文章

CasperJS 错误——它们在哪里?

通过 Charles 代理 casperjs / phantomjs

windows下面安装casperjs

CasperJS:在代码中配置代理选项

如何使用 Chrome 远程调试 CasperJS?

CasperJS API介绍