Money Forward for 住信SBIネット銀行口座情報の自動更新

「マネーフォワード」は、無料のオンライン家計簿、資産管理ツール。

銀行、クレジットカード、証券会社、年金、ポイント、マイルなどの情報を一度、登録するだけで、残高や支出の情報を自動で取り込み分析できる。

知人に教えてもらって手当たり次第に口座登録したら50万円程度のドルの埋蔵金が見つかった。完全に忘れてたわ。

素晴らしいツールだが、マネーフォワードの機能制限や有料プランへの誘導が強まり、利用者からは改悪との声が上がっている。

  • 2015年11月以前:一括更新が終了、連携口座上限を10件に変更
  • 2020年7月7日:資産推移、資産内訳が終了
  • 2022年12月7日:連携口座上限4件に変更

その反動で提携版「マネーフォワード for ◯◯銀行」に移行する人が増えている。

提携版は今後も連携口座10件のまま維持される可能性が高いらしい。次のような利点がある。

  • ① 連携口座数が10個(マネーフォワード無料版は4個)
  • ② 無料版で円グラフ表示がある(マネーフォワードはプレミアム会員のみ)
  • ③ 無料版でも「入出金・残高情報の一括管理」が可能
  • ④ 無料版でもホーム画面で金融機関の残高が確認できる

同じような仕組みを自作しようと思ってた僕には素晴らしいWebサイト。

だけど各金融機関情報の更新が面倒で手動でポチポチ押す必要がある(プレミアム会員は一括ボタンがある)。

寝ている間に勝手にマネーフォワードの更新を実行してくれて、朝見たときには更新済み!

という状況にしたいので自動で金融機関情報を更新するスクリプトを作る。

利用提携サービスは住信SBIネット銀行版。

登録している金融機関情報を自動更新(Seleniumなし版)

さくらインターネット上ではChromedriverが動作しなかった。

だからSeleniumを使わず、まずは代替ライブラリのRequestsとBeautifulSoupを使用して実現を試したい。

  • inputタグのnameとvalueの情報を集める
  • action=””に記載してあるURLにPOSTする

という手順が必要。例えばログインするには

name value
authenticity_token トークン(毎回異なる)
sign_in_session_service[email] 自分のE-mail
sign_in_session_service[password] 自分のパスワード
new1 1
commit ログイン

を渡す必要がある。そしてトークンはサイトにアクセスするたびに変化し、都度取得が必要。

コードは次のとおり。

 

ステータスコードも200が返って正常実行されているように見えるけど更新されていない。

更新ボタンはAjax処理だから正しく動かないのかな……

登録している金融機関情報を自動更新(Seleniumあり版)

こっちはググれば幾らでも出てくる。

【Python】マネーフォワードに登録している金融機関情報を自動更新
こんばんは、エンジニアの眠れない夜です。 最近お金の管理がズボラ過ぎて、毎朝マネーフォワードを眺めて無駄遣いを…

記事が古くSelinum 4未対応なので修正を加える。

 

ChatGPT様の御神託ごしんたくによってww

 

© 泡沫に神は微睡む/安田 のら/KADOKAWA

 
 

ほんとに ありがてぇ……ありがたいこった!

 

これで一発で動くが少しアレンジする。

Selinum 4.6以降なので自動でchrome webdriverバージョン更新する

ChromeDriver自動更新といえば「webdriver-managerをインストール」を紹介する記事が多いが、Selenium 4.6以上であれば不要

Selenium 4.6以前(従来)

「webdriver-manager」をインストール。

次のように書く。

Selenium 4.6以降

Selenium4.6以降 は「selenium manager」がデフォルトでついているため webdriver_manager を使わなくて良い。

seleniumのアップグレードとwebdriver-managerをアンインストール

コードはこれだけで良い。

headlessモードではuser_agent を追加

ヘッドレスにすると次のエラーが出て Web ページ上の要素を見つけることができなかった。

ERROR root :Message: no such element: Unable to locate element: {“method”:”css selector”,”selector”:”[id=”sign_in_session_service_email”]”}
(Session info: chrome-headless-shell=121.0.6167.140); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception

スクリーンショットを取ると「Forbidden」と出ており、user_agent を設定すると正しく動作した。

おわりに

やりたいことが一時間程度で終わった。

最近はChatGPT様の御神託を賜わることで実装は楽だけどエンジニアスキルが無いと完全に目的達成することは難しい。

効率化目的で使うには素晴らしいチートツール。

そして、これで口座情報の日々トラッキングが可能となった。

タイトルとURLをコピーしました