こんにちは。TATです。
今日のテーマは「【Python】SeleniumでSBI証券に自動ログインする方法」です。
PythonでSeleniumを使ってブラウザを操作して、SBI証券の口座に自動でログインする方法について解説します。
プログラムを介して口座に自動ログインすることができれば、そこから保有銘柄の収集や売買注文なども操作もできるので、自動売買を実現することも可能になります。
本記事では、ログインに焦点を当てますが、今後の記事ではログイン後のいろいろな操作方法について解説していきたいと思います。
目次
自動ログインまでの流れ
まずは自動ログインまでの流れについて確認しておきます。
これはとてもシンプルです。プログラムで実装できるレベルに落とし込んであげると次のような流れになります。
自動ログインまでの流れ
- SeleniumでChromeを立ち上げる
- SBI証券のログインページへ遷移
- ユーザーネームとパスワードを入力
- ログインをクリック
Seleniumの準備
PythonでSeleniumを利用するには準備が必要です。
PythonでSeleniumを利用する方法!セットアップの流れを徹底解説します!
続きを見る
Webdriverのダウンロード
SeleniumでChromeを扱うにはWebdriveをダウンロードする必要があります。
普段使っているChromeだけではSeleniumを利用することができません。
こちらからダウンロードできます!
ダウンロードしたらPythonファイルと同じ場所に保存してください。(Pathを指定できるので実際はどこに保存しても問題ありません)
pipでSeleniumをインストール
また、PythonでSeleniumを扱うためにはライブラリをインストールする必要があります。
pipコマンドに対応しているので、"pip install selenium"でSeleniumをインストールしてください。
これでSeleniumを利用するための準備は完了です。
PythonとSeleniumでSBI証券への自動ログインを実装する
準備が整ったところでPythonで実装していきましょう。
最初にご紹介したこちらの流れに沿って解説していきます。
自動ログインまでの流れ
- SeleniumでChromeを立ち上げる
- SBI証券のログインページへ遷移
- ユーザーネームとパスワードを入力
- ログインをクリック
SeleniumでChromeを立ち上げる
まずはSeleniumを起動するコードを書きます。
次のコードを実行すればOKです。
from selenium import webdriver # SeleniumでChromeを起動 driver = webdriver.Chrome()
これでChromeが起動します。Webdriverが別のフォルダーに保存されている場合はexecutable_pathで指定してあげればOKです。
この状態では、何のページも開いていないので何も表示されません。
driverという変数にクラスが格納されているので、今後はこれを弄ってブラウザを操作していきます。
Seleniumで起動すると、「Chromeは自動テストソフトウェアによって制御されています。」という警告が表示されます。
これでSeleniumによるChromeの起動は完了です。
SBI証券のログインページへ遷移
次にSBI証券のログインページへ遷移します。
url = "https://www.sbisec.co.jp/ETGate" driver.get(url)
getを使うと任意のURLへ遷移することができます。
ユーザーネームとパスワードを入力
次にユーザーネームとパスワードを入力します。
値を入力するためには、HTMLから対象となるinputの要素を特定する必要があります。
検証画面から、ユーザーネームのInputを見ると、name="user_id"となっています。
同様に、パスワードのInputについてはname="user_password"となっていました。
これで要素を特定できそうです。
これらの要素を取得して値を入力していきます。
Seleniumでは次のような操作になります。
username_value = "userid" # 任意の値を設定してください password_value = "password" # 任意の値を設定してください username = driver.find_element_by_name("user_id") username.send_keys(username_value) password = driver.find_element_by_name("user_password") password.send_keys(password_value)
画面を確認すると、きちんと値が入力されていることが確認できます。
これでユーザーネームとパスワードの入力は完了です。
ログインをクリック
最後にログインボタンをクリックして、口座にログインします。
先ほどの値の入力と同様に、クリックする際にもHTMLから対象となるinput要素を指定してあげる必要があります。
検証画面を見ると、name="ACT_login"となっていました。これで対象要素を特定することができます。
Seleniumでクリックをする際には次のようなコードになります。
対象となる要素を取得してclick()を最後につけるだけです。
driver.find_element_by_name("ACT_login").click()
画面を見ると、無事にログインできていることが確認できます。
これでPythonでSeleniumを使ってSBI証券へ自動ログインすることができました。
最後にコードをまとめてどうぞ
最後にここまでのコードをまとめてご紹介しておきます。
コピペ用にどうぞ。
from selenium import webdriver # SeleniumでChromeを起動 driver = webdriver.Chrome() # SBI証券のページへ遷移 url = "https://www.sbisec.co.jp/ETGate" driver.get(url) driver.implicitly_wait(60) #追加 # ユーザーネームとパスワードを定義 username_value = "userid" password_value = "password" # ユーザーネームを入力 username = driver.find_element_by_name("user_id") username.send_keys(username_value) # パスワードを入力 password = driver.find_element_by_name("user_password") password.send_keys(password_value) # ログインボタンをクリック driver.find_element_by_name("ACT_login").click() driver.implicitly_wait(60) #追加
こんなに短いコードで実装できてしまうんですから、やっぱりPythonは素晴らしいですよね!
(おまけ)driver.implicitly_waitをつけると安定します
ここで、しれっとdriver.implicitly_wait(60)というコードを追加しました。
これは次の処理を行うにあたり、対象となる要素が見つかるまで待機するという命令になります。
この設定がないと、ページが読み込まれる前に次の処理へ進もうとします。
結果、SBI証券のページを読み込む前に、ユーザーネームとパスワードを入力しようとしてエラーが発生します。
これを回避するためには、きちんとページが読み込まれるまで待機することが必要になります。
driver.implicitly_wait(60)を使うとこの待機を実装することができます。
引数に待ち時間(秒)を指定できます。ここでの設定では、最大で60秒待機し、要素が見つかり次第次の処理へ進みます。
同様のやり方でtimeライブラリのsleepを使う方法もありますが、こちらを使うと、ページの読み込みが終わっても必ず指定した時間を待機することになるので、あまり効率的ではありません。
time.sleep(60)とdriver.implicitly_wait(60)では、前者は必ず60秒間待機します。後者は最大で60秒間待機しますが、次の処理に必要な要素が見つかり次第進みます。
Seleniumを利用する際には、ページの読み込みや処理に要する時間を考慮しながらプログラムを設計するとより安定した動作をしてくれます。
まとめ
本記事では、「【Python】SeleniumでSBI証券に自動ログインする方法」について解説しました。
プログラムを介してSBI証券にログインすることができると、ポートフォリオを収集したり、売買注文を出したり、いろいろな操作をすることができるようになります。
ここではログインに焦点を当てて解説しましたが、今後はログイン後のさまざまな操作方法についても解説していこうと思います。
まずは最初のステップとして、ログインは実装完了です。
最後まで読んでくださり、ありがとうございました。