クイックノート

ちょっとした発見・アイデアから知識の発掘を

【R】インターネットバンクを使って自動振替

生活費用、貯金用、ローン返済用など、
複数の口座を分けて使っていると、
毎月、給料日の度に振替を行うことになります。

最近はオンラインで振替ができる銀行も多くなってきて、
昔よりは手間が減ったと言えますが、
それでも、毎回同じことをするのは面倒ですし、
うっかり忘れてしまうという可能性もあります。

これくらい自動化してほしいと思うのですが、
手数料を取られてまで自動化するかと言われると、
気が進みません。

それなら、自分で自動化してしまおうということで、
ブラウザの自動操作を使って自動振替するプログラムを作ってしまいましょう。

今回は、「RSelenium」を使って、
SMBCダイレクト」の操作を自動化してみます。

※Webページの仕様変更などにより
スクリプトが正常に動作しない可能性があります。
記載されているスクリプト参考程度として、
使用する場合は十分に注意した上で、自己責任でお願いします。

何をするのか

自動操作といっても、難しいことをするわけではなく、
普段ブラウザで行っている操作と
同じ操作をコンピューターに自動でさせるだけです。

インターネットで振替をしようと思うと、

  1. インターネットバンキングのホームページにアクセスする
  2. 自分のアカウントでログインする
  3. 振替のページに移動する
  4. 振替の情報を入力する
  5. 振替を実行する

のような手順を実行しているはずですね。

これらの手順を全て、コンピューターでやってもらえば、
自動で振替を行うことができます。

少々難しいのは、ウェブページは人間が使いやすいように、
視覚的に分かりやすいボタンを表示したりしてくれていますが、
これをコンピューターの目線で見て、
どのボタンを押せば振替のページに移れるか
などを見つける必要があるところです。

とはいえ、それさえできれば、 普段やってる操作を順番に書いていくだけなので、
意外と簡単に自動化できてしまいます。

RSelenium の導入

「RSelenium」とは、
Selenium というブラウザの自動操作を行うツールを、
R 上で使うためのパッケージです。

詳しい導入方法は、下記の記事を参照してください。

clean-copy-of-onenote.hatenablog.com

自動操作のRスクリプト

準備もできたところで、ブラウザの自動操作を行うスクリプトを作っていきます。

各情報の設定

アカウントにログインするために、口座番号や暗証番号などの情報が必要となります。

library(RSelenium)
library(rvest)

branch = "支店番号"
account = "口座番号"
pass   = "暗証番号"

out_acc = "送金元口座番号"
in_acc = "送金先口座番号"
amount = "送金金額"

上のそれぞれの変数に、口座番号などの情報を入力しておくこととします。

トップページへの接続

まずは、selenium を使ってトップページにアクセスするところから入ります。

remDr = remoteDriver(remoteServerAddr = "192.168.99.100",
                     port = 4444,
                     browserName = "chrome")
remDr$open()

remDr$navigate("http://www.smbc.co.jp/")

R から selenium に接続して、remDr を使って selenium の操作を行います。
navigateで指定したURLへ移ります。

selenium で操作しているブラウザが、今どのページを見ているかは、
remDr$getPageSource()[[1]] %>% 
read_html() %>% write_html(file="tmp.html")
を実行すると、「tmp.html」というファイルが出力されるので、 そのファイルをブラウザで開いて確認することができます。

ログインページへ移動

まず、トップページからログインページに移動する必要があります。

普段なら、ログインのボタンをクリックすればいいだけですよね。

同じように、ログインボタンを見つけて、それをクリックするという操作を、
selenium で実行します。

login_elem = remDr$findElements(value="//li[@class='loginBlockArea01']/p/a")[[1]]
login_elem$clickElement()

Sys.sleep(1)

トップページの html ファイルを見てみると、
ログインボタンは、class=loginBlockArea01となっているので、
それを手掛かりにボタンを見つけます。

ボタンを見つければ、clickElementでクリックすればOKです。

ページの移動に時間がかかることを見越して、
Sys.sleepで少し待っています。

ログイン情報を入力してログインする

ログインページに移ったら、
ログインの情報を入力して、ログインしますよね。

ログイン情報の入力は、入力ボックスをクリックして、
キーボードで入力するという普段通りの方法を自動化しましょう。

branch_elem = remDr$findElements(using = "name","S_BRANCH_CD")[[1]]
accnt_elem = remDr$findElements(using="name","S_ACCNT_NO")[[1]]

branch_elem$clickElement()
remDr$sendKeysToActiveElement(list(branch))
accnt_elem$clickElement()
remDr$sendKeysToActiveElement(list(account))

pass_elem = remDr$findElements(using="name","PASSWORD")[[1]]
pass_elem$clickElement()
remDr$sendKeysToActiveElement(list(pass))

logon_elem = remDr$findElements(using="class","bLogon")[[1]]
logon_elem$clickElement()

Sys.sleep(1)

入力するのは、支店番号と口座番号なので、その入力ボックスを、 remDr$findElementsで見つけています。

入力ボックスを見つけたら、
そのボックスをクリック(clickElement)して、
キーボード入力をremDr$sendKeysToActiveElementで行います。

暗唱番号の入力についても同様です。

全ての入力が終わると、ログインのボタンをクリックして完了なので、
ボタンを探して、クリックします。

暗証番号の更新をスキップ

ログインを完了すると、暗唱番号を更新してくださいという画面が表示されます。
毎回表示されるのですが、毎回スキップしています。(あまり良くはない)

ということで、普段やっている通り、スキップしましょう。

confirm_elem = remDr$findElements(value="//input[@name='imgNext.y']")[[1]]
confirm_elem$clickElement()

Sys.sleep(1)

これも、スキップするためのボタンを見つけてクリックするだけなので、
上と同様にできます。

振替のページへ移る

ログインして最初に表示されるのは、
それぞれの操作へのメニューページになります。

そのため、今したい操作(振替)のページまで移動しないといけません。

やることは、今までと同じで、ボタンを見つけてクリックするだけなので、
同じようなスクリプトで実現できます。

transfer_link_elem = remDr$findElements(using="partial link text","振込・振替")[[1]]
transfer_link_elem$clickElement()

transfer_link_elem = remDr$findElements("partial link text","振替をする")[[1]]
transfer_link_elem$clickElement()

Sys.sleep(1)

振替情報を入力する

振替のページに移ると、どの口座から、どの口座に、いくら送金するか
を指定することになります。

これもログインの時と同じように、 クリックやキーボード入力を使って操作するので、
そのままseleniumの操作として書けばOKです。

out_acc_elem = remDr$findElements(value=sprintf("//label[contains(./text(),\"%s\")]",out_acc))[[1]]
in_acc_elem = remDr$findElements(value=sprintf("//label[contains(./text(),\"%s\")]",in_acc))[[2]]
amount_elem = remDr$findElements("name","PAY")[[1]]

out_acc_elem$clickElement()
in_acc_elem$clickElement()

amount_elem$clickElement()
remDr$sendKeysToActiveElement(list(amount))

振替を実行する

後は、振替を実行するボタンをクリックするだけです。

大抵の場合、本当に実行するかの確認が行われるので、
確認のボタンもクリックします。

ボタンのクリックは、これまでのスクリプトと同様に記述することができます。

next_btn = remDr$findElements(value="//li[@class='next']/input")[[1]]
next_btn$clickElement()

Sys.sleep(1)

conf_btn = remDr$findElements(value="//li[@class='next']/input")[[1]]
conf_btn$clickElement()

スクリプトを定期実行する

上で、振替の一通りの手続きをスクリプト化できたので、
これを実行すれば、最初に設定した金額が自動的に送金されます。

毎月送金するには、これを月1回、定期的に実行すればよく、
Windows なら「タスクスケジューラ」、linuxなら「cron」などを使って、
指定した日にスクリプトを起動すれば自動振替が実現できます。

まとめ

銀行での口座振替を自動で実行するスクリプトを作りました。

これで、ローン口座にお金を入れ忘れることもなくなり安心ですね。。。

ただ、ホープページのレイアウトが変わると、
ほぼ役に立たなくなるので、エラーなく実行できたかくらいは確認が必要です。

エラーが発生したらメール等で通知するようにしておくといいかもしれません。

プライバシーポリシー