我的银行有一个非常简单的登录系统。使用casperjs,我已经能够提取我的最新帐户余额和我的最后一笔交易。从互联网上抓取数据的方法很多,我只是用Casperjs来测试它的能力。我向银行查询,他们说--只要它是我的银行账户,就没问题。
这是我必须解决的技术问题:银行将每天登录的次数限制在40左右。如果登录的数量超过这一数字。它会把我锁在我的帐户外6个小时。(此外,系统每20分钟记录我一次-与操作无关)
我想弄清楚的是:是否有一种方法只在事务发生且帐户余额有变化时才运行刮取函数?
为了简单起见,通常是在及时的基础上进行刮擦。我能实现什么,这是一个推送通知风格的刮取机制?
目标是在每次事务发生时都得到消息/电子邮件(最大延迟3-4分钟),同时不被锁定在系统之外。
任何有创意的答案都可以。
发布于 2015-02-10 18:44:02
您如何知道在没有登录的情况下发生了事务?如果网上银行网站编程良好,你将不得不登录。
小算术:
很明显你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();https://stackoverflow.com/questions/28438531
复制相似问题