Humanity

Edit the world by your favorite way

Puppeteer で楽天銀行の入出金明細を保存

以前楽天銀行ワンタイムパスワードを突破しつつ明細履歴を TSV ファイルに保存するスクリプトを書いた。 ワンタイムパスワードのメールを受け取って本文をパースするために IMAP にログインしてメールが来るまで待つ、みたいな事をしている。

tyru.hatenablog.com

前のは id:motemen さんのスクリプトを参考にさせてもらいながら書いたので Protractor + WebDriver 製だった。

ただ最近はなんやかんや (Headless Chrome + Chrome Debugging Procotol) で ChromeGUI のない環境でも動かす事ができて、 さらにヘッドレス Chrome を操作する Puppeteer というライブラリもある。 しかもこれは Google 自身が開発しているのでサードパーティのライブラリよりも大分信頼できる。

Puppeteer はフラグ1つ変えるだけでヘッドレスで動作するかどうかを切り替える事ができるので、 開発中は非ヘッドレスでやりながら、うまくいったらヘッドレスにして Linux サーバで cron で動かすとかができてだいぶ便利 (のはず)。 ちなみに自分の環境は Windows 10 で元々 Chrome を入れてたので使わなかったけど、 Puppeteer 自体に Chrome をダウンロードしてくる機能とかもあるらしい。

ということで冒頭のスクリプトを Puppeteer で書き直してみた。 Node v8.10.0 で動作確認済みです。

github.com

Puppeteer の API

詳しくはこの辺を見てください。

スクリプトの解説

すみません、力尽きました。

すでに色んなブログとかで Puppeteer の解説されてるので省略。

あとでやるかも

楽天 e-NAVI (楽天カードの明細取得) とかもスクレイピングしたかったんだけど、そもそも e-NAVI は CSV で明細を取得できるのでログインしてそれをダウンロードすればええやん、 と思ったら CSV 取得を Fetch API でやろうとしてうまくいかなかった (HTML が返ってきてしまう)。 ちなみにダウンロードの URL はこれ。ログインしてれば CSV がダウンロードされるはず。

https://www.rakuten-card.co.jp/e-navi/members/statement/index.xhtml?downloadAsCsv=1

誰か pull request 送ってください。

参考エントリ

tech.vasily.jp