2015-02-10 31 views
0

我的銀行有一個非常簡單的登錄系統。使用casperjs我已經能夠拉我最近的帳戶餘額和我的最後一筆交易。有很多方法可以從互聯網上獲取數據,我只是用Casperjs來測試它的功能。我向銀行查了一下,他們說 - 只要它是我的銀行賬戶,這沒有問題。僅在檢測到更改時刮擦?

以下是我不得不處理的技術問題:銀行將登錄次數限制爲每天約40次。登錄次數應高於此數量。它會將我從我的帳戶中鎖定6個小時。 (另外,系統每隔20分鐘註銷一次 - 與操作無關)

我想要做的是: 有沒有辦法只在發生事務時才運行刮擦功能?賬戶餘額變化了嗎?

刮擦通常是爲了簡單而及時完成的​​。我可以實現的是一個推送通知樣式的抓取機制?

目的是獲取消息/電子郵件每次發生事務(最多3-4分鐘的延遲),同時不會被鎖定在系統外。

任何有創意的答案都可以。

回答

2

您如何知道事務沒有登錄?如果網上銀行網站被編程好,你必須登錄

小算術:

  • 〜40每24登錄小時20分鐘
  • 導致登錄每一個後
  • 註銷24h/39〜37分鐘無風險鎖住
  • 這意味着你最多延遲了17分鐘(這是waaay太多,沒有新信息:)

你顯然沒有清醒整個24小時。每16小時

  • 註銷

    • 〜40個登錄20分鐘
    • 導致每16小時/ 39〜24.6分鐘登錄後,而不用擔心鎖定
    • 這意味着你必須在5的延遲分鐘(這似乎是可以接受的)

    與您的銀行交談,無論他們是否提供API。如果您的帳戶被鎖定,他們可能會懷疑您的活動並永久鎖定您的帳戶。

    由於CasperJS是異步的,您將不得不遞歸使用您的scraping函數。

    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(); 
    
  • +0

    嗨Artjom,謝謝你的回覆。 當然有道理,讓我們的活躍期縮短到16.幸運的是,銀行沒有興趣提供api。基於我與他們的對話 - 他們聲稱安全的原因,但我認爲他們只是懶惰。 (請注意,我在第三世界國家,一切都需要更長的時間) 我正在檢查有效的表格以查看是否有任何更改。 我需要在casperjs上實現哪些方法才能確保我們不會註銷,但每隔30秒左右刷新頁面並等待更改。 再次感謝。 – 2015-02-11 05:17:17

    +0

    我添加了一個應該爲你工作的腳本。它有一個假設,即CasperJS永不停止。你可能只想運行它16個小時,然後用cron或類似的東西重新運行它。 – 2015-02-11 07:31:53

    +0

    嘿!這可能工作。讓我試試看,讓你知道!謝謝 – 2015-02-11 17:28:29