javascript - 登录银行帐户时 CasperJS 超时

标签 javascript web-scraping phantomjs casperjs

我正在尝试使用 CasperJS 登录 Capital One 360​​ 银行帐户。它加载用户名屏幕,正确输入用户名,加载密码屏幕,但随后超时(大概没有错误)并在输入密码后停止。

有人知道我做错了什么吗?

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

var capone360 = "https://secure.capitalone360.com/myaccount/banking/login.vm";

casper.start(capone360);

casper.then(function(){
   casper.waitForSelector("#ACNID", function() {
        this.echo(this.getTitle());
        this.sendKeys('#ACNID', username);
    }, true); 
});

casper.then(function(){
    this.click("#btn_continue"); 
});

casper.then(function(){
    this.waitForSelector("#currentPassword_TLNPI", function() {
        this.echo(this.getTitle());
        this.sendKeys('#currentPassword_TLNPI', password);
    }, true);
});

casper.then(function(){
    this.clickLabel("Continue", "a");
});

casper.then(function(){
    this.waitForSelector("#deposittable", function() {
        this.echo(this.getTitle());
    }, true);
});

casper.run();

PhantomJS 版本 2.0.0

更新 切换到 PhantomJS 1.9.8。根据 @Artjom B. 的建议。现在有错误说: '无法在不存在的选择器上调度 mousedown 事件:xpath 选择器://a[text()="Continue"]'。

它正在尝试点击:

<a class="ada-new-win" href="javascript:void(0);" role="button" onclick="submitForm('continue'); return false;">Continue</a>

我认为它应该在那里,因为它正在等待密码输入框加载,但我是否忘记了其他东西?

最佳答案

PhantomJS 2.0.0 有一个错误,即使专门监听各种错误事件,错误也不会打印到控制台。这就是为什么您看不到明显的错误,如下所示:

TypeError: true is not a function

该错误的原因是您提供 true作为 waitForSelector() 的第三个参数,但函数签名是

waitForSelector(String selector[, Function then, Function onTimeout, Number timeout])

脚本中的某些步骤似乎中断了,因为找不到选择器。传递的函数 onTimeout将被执行,但是true不是一个函数。只需删除第三个参数即可查看错误所在。如果仍然没有显示任何内容,请尝试使用 PhantomJS 1.9.8。

<小时/>

您需要等待“继续”按钮出现,使用 waitForSelector(x(selector))和/或您需要使用更强大的选择器:

var x = require("casper").selectXPath;
...
var continueButtonSelector = x("//a[contains(text(), 'Continue')]");
casper.waitForSelector(continueButtonSelector);
casper.thenClick(continueButtonSelector);

这有时是必要的,因为元素可能是用这样的空格定义的

<a>   Continue   </a>
   ^^^        ^^^

这意味着 text()="Continue"无法匹配。浏览器渲染器会忽略这个空白,但它仍然在 DOM 中。

关于javascript - 登录银行帐户时 CasperJS 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32629188/

相关文章:

web-scraping - Julia :网站抓取?

Python CrawlSpider

javascript - 为自动弹出窗口添加关闭按钮

javascript - 如何查找表单参数的存储位置并在请求中使用它们

javascript - ECMAScript6 类中的碰撞函数

javascript - 在 phantomjs 中解析发布数据

selenium - PhantomJS 中的 webdriver 显示大小

javascript - CasperJS连续运行

javascript - 以编程方式触发的事件不适用于事件委托(delegate)

javascript - 如何对 Google Charts 数据表进行排序并将排序扩展到其他列?