WealthNaviのサイトにPythonとSelenium使ってログインする方法を解説します。
※2021/02/23時点の情報です
環境
- Windows 10
- Python 3.8
- Selenium 3.141.0
全体の処理の流れと注意点
全体の処理の流れについては、下記記事に詳しく書いたのでこちらもあわせて確認してみてください。楽天銀行の例になっていますが、処理の流れは同じです。
また、下記記事では他サイトのサンプル一覧と注意点を解説しているのでこちらも参考にしてみてください。
WealthNaviでのポイント
全体の処理の流れについては上記記事を参考していただくとして、ここではWealthNaviサイトにおけるポイントを解説します。
二段階認証設定を有効にしている場合はログインできない
WealthNaviにはセキュリティ強化のため二段階認証を設定することができます。
2段階認証とは、WealthNaviにログインする際、ログインIDとパスワードに加え、スマートフォンの2段階認証アプリ(※)で発行された6桁のコードによる認証を行うことで、セキュリティをより強化するための仕組みです。
(WealthNavi公式HPより引用)
これはセキュリティ面を考慮するとぜひ設定を有効にしておきたいところですが、PythonとSeleniumを使って自動ログインしようとするとうまくいきません。
2段階認証アプリで発行される6桁のコードは毎回ランダムであり、そもそもスマホアプリで発行されるので捕捉しようがないんですね。
自動ログインしてそのあとスクレイピングしてデータ取得したい場合は、せめてパスワードを強固なものにしておきましょう。当然、他サイトと同じパスワードの使い回しはやめたほうがよいです。
サンプルコード全文
#
# WealthNaviサイトへログイン
#
import json
from selenium.webdriver import Firefox, FirefoxOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
# 設定ファイルを取得
login_info = json.load(open("login_info.json", "r", encoding="utf-8"))
# ログインサイト名
site_name = "sec_wn"
# ログイン画面URL
url_login = login_info[site_name]["url"]
# ユーザー名とパスワードの指定
USER = login_info[site_name]["id"]
PASS = login_info[site_name]["pass"]
# Firefoxのヘッドレスモードを有効にする
options = FirefoxOptions()
options.add_argument('--headless')
# Firefoxを起動する
browser = Firefox(options=options)
# ログイン画面取得
browser.get(url_login)
# 入力
e = browser.find_element_by_id("username")
e.clear()
e.send_keys(USER)
e = browser.find_element_by_id("password")
e.clear()
e.send_keys(PASS)
# ログイン
button = browser.find_element_by_id("login")
button.click()
# ページロード完了まで待機
WebDriverWait(browser, 10).until(
ec.presence_of_element_located((By.CLASS_NAME, "evaluation"))
)
# ログインできたか確認(画面キャプチャ取る)
browser.save_screenshot("../screenshots/sec_wn/home.png")
browser.quit()
ログイン情報設定ファイル
サイトURLやログイン情報(IDやパスワード)は、JSON形式のファイルに保持するようにしています。以下のサンプルでは楽天銀行とWealthNaviの2サイトの情報と設定しています。
"id", "pass"の値を書き換えればそのまま使えるはずです。
なお、このファイルだけは絶対に漏洩しないよう、管理方法に注意しましょう!
{
"bank_rakuten": {
"id": "1234567890",
"pass": "password",
"url": "https://fes.rakuten-bank.co.jp/MS/main/RbS?CurrentPageID=START&&COMMAND=LOGIN"
},
"sec_wn": {
"id": "1234567890",
"pass": "password",
"url": "https://invest.wealthnavi.com/"
}
}