我的银行有一个非常简单的登录系统。使用casperjs我已经能够提取我的最新账户余额和我的最后一笔交易。有很多方法可以从互联网上删除数据,我只是使用Casperjs来测试它的功能。我和银行核对过他们说 - 只要它是我的银行帐户,就没问题了。
以下是我必须处理的技术问题:银行将登录次数限制为每天约40次。登录次数是否应该高于该次数。它将锁定我的帐户6小时。 (此外,系统每20分钟登出一次 - 与行动无关)
我想要弄清楚的是: 如果交易已经发生并且账户余额发生变化,有没有办法只运行抓取功能?
刮擦通常是为了简单起见而及时进行的。我可以实现什么是推送通知风格的抓取机制?
目标是获取消息/电子邮件每次发生交易(最多延迟3-4分钟),同时不会被锁定在系统之外。
任何有创意的答案都会有。
答案 0 :(得分:2)
如果没有登录,您怎么知道交易已经发生?如果网上银行网站编程良好,您将必须登录。
小算术:
你显然整个24小时都没有醒来。
与您的银行联系,他们是否提供API。如果您的帐户被锁定,他们可能会对您的活动产生怀疑并永久锁定您的帐户。
由于CasperJS是异步的,你必须递归使用你的抓取功能。
var casper = require("casper").create(),
url = "your bank url",
counter = 0;
function login(){
counter++;
this.thenOpen(url, function(){
this.fillSelectors("login form selector", {
"username selector": "username",
"password selector": "password",
// more if necessary
}, true); // automatically submit
});
}
function scrape(){
// do your thing
}
function run(){
if (counter == 39) {
counter = 0;
this.wait(8 * 60 * 60 * 1000)
.then(run);
} else if (this.exists("selector which shows that you are logged in")) {
this.then(scrape)
.wait(30 * 1000)
.then(run);
} else if (this.exists("selector which shows that you where automatically logged out")) {
this.wait(5 * 60 * 1000)
.then(login)
.then(run);
} else {
this.then(login)
.then(run);
}
}
casper.start().then(run).run();