やりたいこと・背景
- 三井住友銀行のインターネットバンキング SMBCダイレクトで口座にログインし、現在の口座残高を取得
- 他行では個人向けのAPIが公開されていたりする(個人で動作を試せる銀行系オープンAPIまとめ等参照)が、三井住友銀行では現在法人向けしかないようす
- MoneyForwardやZaim等のFinTechサービスのAPIを使って取得することはできるかもしれませんが、それらのサービスを日常的には利用していないため、調べていません
- 三井住友銀行のLINE公式アカウントに友だち登録してID連携すると、チャット形式で残高が取得できます。この記事ではよりプログラマブルに取得したい場合を想定しています。たとえば「オレオレ家計簿APIみたいなものをつくりたい」や「残高が一定金額以上(以下)になったら通知させたい」といった応用ができます
使用するもの
- Node(v12.16.1)
- npm (v6.13.4)
- Puppeteer (v2.1.1):ヘッドレスブラウザを立ち上げてスクレイピングなどに使えるNodeライブラリ
手順
- すぐに自分自身の口座で試したい場合はソースコードからREADMEに沿って進めればOKです
- https://github.com/embokoir/puppeteer-smbc
- 以下はコマンドで進める場合
$ mkdir puppeteer-smbc
$ cd puppeteer-smbc
$ npm init -y$ npm install puppeteer dotenv
$ touch server.js .env
.env(000...を自分のものに書き換える)
BRANCH_CODE=000 #支店名3桁
ACCOUNT_NUMBER=0000000 #口座番号7桁
PASSWORD=0000 #第一認証4桁
server.js(そのまま)
constpuppeteer=require('puppeteer')constdotenv=require('dotenv')dotenv.config()constBRANCH_CODE=process.env.BRANCH_CODEconstACCOUNT_NUMBER=process.env.ACCOUNT_NUMBERconstPASSWORD=process.env.PASSWORD;(async()=>{// validate .envif(!BRANCH_CODE||!ACCOUNT_NUMBER||!PASSWORD){console.log('Invalid Try. Make sure to create a file ".env" and write your BRANCH_CODE / ACCOUNT_NUMBER / PASSWORD')return}// launch browserconsole.log('launching browser...')constbrowser=awaitpuppeteer.launch({headless:false,args:['--no-sandbox']})// go to pageconstpage=awaitbrowser.newPage()awaitpage.setViewport({width:1440,height:2000})awaitpage.setExtraHTTPHeaders({'Accept-Language':'ja'})constLOGIN_URL='https://direct.smbc.co.jp/aib/aibgsjsw5001.jsp'awaitpage.goto(LOGIN_URL,{waitUntil:'domcontentloaded'})// set input-data then submitawaitpage.type('input[name=S_BRANCH_CD]',BRANCH_CODE)awaitpage.type('input[name=S_ACCNT_NO]',ACCOUNT_NUMBER)awaitpage.type('input[name=PASSWORD]',PASSWORD)awaitPromise.all([page.waitForNavigation({waitUntil:'networkidle0'}),page.click('input[type=submit]')]).catch(asyncerr=>{console.log(err.response)process.exit(1)})// redirect to balance-page then get balanceawaitpage.goto('https://direct3.smbc.co.jp/servlet/com.smbc.SUPRedirectServlet')constbalance=awaitpage.$eval('.fRight',elm=>elm.textContent.replace(/\s/g,'')).catch(asyncerr=>{console.log(err)process.exit(1)})console.log(`Your current balance is ${balance}`)// close browserawaitbrowser.close()})()実行(headless: falseなのでブラウザが立ち上がる)
$ node server.js
注意
- 正しく.envを設定する。第一認証を一定回数以上間違えるとインターネットバンキングのロックがかかるようです
- 入力部分のセレクタは2020/3/24現在のものです。サイトのHTML構造が変更したら適宜こちらも書き換える
おわり


