Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9299

三井住友銀行口座の残高を自動取得する(Puppeteerで)

$
0
0

やりたいこと・背景

  • 三井住友銀行のインターネットバンキング SMBCダイレクトで口座にログインし、現在の口座残高を取得
  • 他行では個人向けのAPIが公開されていたりする(個人で動作を試せる銀行系オープンAPIまとめ等参照)が、三井住友銀行では現在法人向けしかないようす
  • MoneyForwardやZaim等のFinTechサービスのAPIを使って取得することはできるかもしれませんが、それらのサービスを日常的には利用していないため、調べていません
  • 三井住友銀行のLINE公式アカウントに友だち登録してID連携すると、チャット形式で残高が取得できます。この記事ではよりプログラマブルに取得したい場合を想定しています。たとえば「オレオレ家計簿APIみたいなものをつくりたい」や「残高が一定金額以上(以下)になったら通知させたい」といった応用ができます

使用するもの

  • Node(v12.16.1)
  • npm (v6.13.4)
  • Puppeteer (v2.1.1):ヘッドレスブラウザを立ち上げてスクレイピングなどに使えるNodeライブラリ

手順

$ mkdir puppeteer-smbc
$ cd puppeteer-smbc
$ npm init -y$ npm install puppeteer dotenv
$ touch server.js .env

.env000...を自分のものに書き換える)

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

以下の赤枠が自動で入力され、
Image from Gyazo

残高部分を取得してコンソールに表示します
Image from Gyazo

Image from Gyazo

注意

  • 正しく.envを設定する。第一認証を一定回数以上間違えるとインターネットバンキングのロックがかかるようです
  • 入力部分のセレクタは2020/3/24現在のものです。サイトのHTML構造が変更したら適宜こちらも書き換える

おわり


Viewing all articles
Browse latest Browse all 9299

Trending Articles