Pythonを使ってSBI証券にログインし、二段階認証を自動化しようとしているが、途中で躓いてしまうことがあります。特に、二段階認証の部分を手動で処理した後、次回以降を自動化する方法について説明します。以下の方法で問題を解決できるはずです。
1. 二段階認証を自動化するための考慮点
まず、二段階認証(2FA)を自動化する場合、セキュリティの問題が関わるため、注意が必要です。通常、SBI証券の二段階認証は、Google AuthenticatorやSMSを利用する形式です。これをPythonで完全に自動化するには、2FAのトークンを取得する方法が必要です。
2. 二段階認証後の自動ログイン設定
二段階認証が完了した後、自動ログインを設定するには、ログイン時のクッキーやセッション情報を保存し、再利用する方法があります。セッションを管理するために、Seleniumを使用してブラウザセッションを維持し、次回のログインでそのセッションを再利用します。
3. コード修正提案
まず、現行のコードで気になる点は、二段階認証を完全に自動化する部分が抜けていることです。以下のステップで修正できます。
- クッキー保存: 二段階認証を通過した後、ブラウザのクッキーを保存し、次回のログイン時にそれを再利用する。
- ブラウザセッションの管理: セッションを維持するために、Seleniumのセッション管理機能を活用し、ブラウザを開いたままで次回のログインを素早く行えるようにする。
- Google Authenticatorのトークン自動化: トークンを自動で取得する方法として、`pyotp`などのライブラリを使用して、Google Authenticatorのコードを生成し、自動で入力する。
4. サンプルコード(改良案)
以下のコードで、クッキーの保存と再利用を行い、二段階認証を自動化します。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
import time
options = Options()
# セッション用のプロファイルを設定
options.add_argument(r'--user-data-dir=C:\Users\YourUser\AppData\Local\Google\Chrome\User Data')
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
# SBI証券のログインページを開く
url = 'https://login.sbisec.co.jp/?_scpr=intpr=hn_login'
driver.get(url)
# ユーザー名とパスワードを入力
username = 'YOUR_USERNAME'
password = 'YOUR_PASSWORD'
driver.find_element_by_name('username').send_keys(username)
driver.find_element_by_name('password').send_keys(password)
# ログインボタンをクリック
driver.find_element_by_id('pw-btn').click()
# 二段階認証コードを自動で入力(例:pyotpを利用)
token = pyotp.TOTP('YOUR_SECRET').now()
driver.find_element_by_name('auth_code').send_keys(token)
# クッキー保存
cookies = driver.get_cookies()
# cookiesをファイルに保存し、次回ログイン時に再利用
まとめ
SBI証券の二段階認証をPythonとSeleniumで自動化するためには、クッキー管理やGoogle Authenticatorのトークンを自動取得する仕組みが重要です。セッションを管理し、認証コードを自動で入力することで、ログイン作業を効率化することができます。


コメント