前回に引き続きPythonとSeleniumを使ってスクレイピングを行ったのでそのメモ。 今回は三菱東京UFJ銀行のネットバンキングから残高を取得してみた。
ソースコード
とりあえず先に今回作ったソースコードを載せる。
# -*- coding:utf-8 -*- import time from selenium import webdriver #URL MUFG_URL = 'https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001' # MUFG_ID&Pass ID = "***" PASSWORD = "***" try: browser = webdriver.Chrome() browser.get(MUFG_URL) time.sleep(1.5) #ログイン browser.find_element_by_id('account_id').send_keys(ID) browser.find_element_by_id('ib_password').send_keys(PASSWORD) browser.find_element_by_class_name('admb_m').click() time.sleep(1) #口座残高取得 s = browser.find_element_by_id("setAmountDisplay").text print(s) finally: browser.quit()
1行目はutf-8の文字を使うという宣言をするためにある。 2行目はWebサイトにアクセスしてしばらく待つ作業が必要なのでそのための文 3行目は前回記載のSeleniumを使うための文
URLとID,Passを先に覚えさせておく
#URL MUFG_URL = 'https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001' # MUFG_ID&Pass ID = "***" PASSWORD = "***"
この箇所は最初にURLとID,Passを後で使うために、変数に代入しておく箇所 IDとPASSWORDには自分のアカウントのを記載しておく。
実際にアクセス
ここから実際にURLにアクセスする。
1.webdriverのセット
browser = webdriver.Chrome()
browser.get(MUFJ_URL)
time.sleep(1.5)
まず始めにwebdriverを使うのでbrowserに結びつける。 次にbrowserにドライバが結びつけられているのでそこから.getを使って先ほど覚えさせたMUFJ_URLにアクセスする。 その後time.sleep()を使って上の例では1.5秒待っている。
2.IDとPassWordを入力
webdriverはfind_element_by_xxxを使うことでHTMLから要素を探しだしてくれる。 抜き出せる要素は様々で赤文字のxxxを変えることでidやclass_nameやxpathなどから取得できるが今回はユーザIDとパスワードはidから探してみる。
実際に三菱東京UFJ銀行のサイトにアクセスをしてみてHTMLのソースコードを確認してみると以下のようになっている。
(略)... <input type="text" name="KEIYAKU_NO" id="account_id" value="" maxlength="22" tabindex="1" autocomplete="off" onkeydown="submitOnEnter(event);"> (略)...
拡大
拡大2
上記の事からユーザIDの入力箇所のid要素はaccount_idということが分かるので以下のように探索する。
browser.find_element_by_id('account_id')
そして抜き出した要素に先ほど代入しておいたIDを挿入するために.send_keys(ID)を文の下につなげる。そうすることで入力欄にIDの中身が挿入される。
※また、別に予め変数に代入しておかなくても
browser.find_element_by_id('account_id').send_keys("自分のid")
でも良い。
パスワードも同じようにしてHTMLからidを探し出してみるとib_passwordなので抽出するコードは以下の通りになる。
browser.find_element_by_id('ib_password').send_keys(PASSWORD)
3.ログインボタンをクリック
ユーザIDとパスワードを入力したら次はログインボタンをクリックする。 というわけでHTMLソースコードを確認してみるのだが今度はid要素がなく以下のとおりになっている。
<p class="acenter admb_m">
拡大1
拡大2
上記の事からログインボタンのHTMLのclassはacenter admb_mの2つということが分かるので今回は後者のadmb_mを指定する。 class_nameから探索してするには以下のとおりである。
browser.find_element_by_class_name('admb_m').click()
そして今度は文字を挿入するのではなくボタンをクリックするのが目的なので後ろに.click()をつなげる。 するとログインボタンがクリックされユーザIDとパスワードが間違ってなければログインできる。
残高の確認
ログインに成功したら今度は残高を取得するのが目的なので残高が記載されている箇所をまたしても同じように探してみる。
これがログイン後の画面でこの矢印の部分に残高が記載されているのでここを取得できれば良い。 ちなみにソースコードは以下の様になっている。
<p id="setAmountDisplay">xxx,xxx<span>円</span></p>
上記の事から口座残高はid要素のsetAmountDisplayに記載されていることがわかる。
なのでこれをテキストとして変数に代入する。
s = browser.find_element_by_id("setAmountDisplay").text
最後に口座残高を代入した変数を表示すれば画面に残高が表示される。
print(s)
ブラウザを終了するときは前回記載のbrowser.quit()で終了すれば良い。