銀行をスクレイピングする

最近、UFJ銀行スクレイプするの流行りみたいなので、スクレイピングモジュール出したし、乗らないわけにいかなかった。

元ネタはこれ

まだmechanizeで消耗してるの? WebDriverで銀行をスクレイピング(ProtractorとWebdriverIOを例に) - 詩と創作・思索のひろば (Poetry, Writing and Contemplation)

(ns web.scraper.sample.ufj
  (:require [web.scraper :refer :all]
            [clojure.pprint :as pp]))

(defn login []
  (let [client (default-mode! (make-client browser-chrome))
        form (get-form-by-name (get-page client "https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001") "MainForm")]
    (let [submit (get-elem-from-nodelist-by-index 
                  (get-elements-by-tag-name form "a") 5)
          id (get-input-by-name form "KEIYAKU_NO")
          pass (get-input-by-name form "PASSWORD")]
      (input-form id (str (System/getenv "UFJ_ID")))
      (input-form pass (str (System/getenv "UFJ_PASS")))
      (click submit))))

(def logined (login))

(defn account []
  (-> (page->enlive logined)
      (select-text-node [:div#account :div.situation :table.situation_data :tbody :tr :td.number :p#setAmountDisplay])
      (as-> x (map clojure.string/trim x)
            (pp/pprint x))))

CIDER replで試す場合はrepl上げる前にemacsのsetenvで環境変数設定してね。 というか自分のモジュールで他にもあれやこれやスクレイプしてる。 APIあればいいのに。