Excelから証券会社のWebページに自動ログイン(2)
前回は必要なソフトウェアのダウンロード、Excelの設定を行いました。
第2回の今回は、実際にExcelからWebブラウザをコントロールして証券会社のWebページにログインしてみます。
Excelブックを新規に作成して、マクロ有効ブックとして保存
VBA(マクロ)を含むExcelブックは、マクロ有効ブック(拡張子.xlsm)として保存する必要があります。まずはExcelブックを新規作成後に、このマクロ有効ブック形式で保存しておきましょう。
以降、Excelシートやプログラムコードを作成していきますが、こまめに保存していきましょう。Ctrl+Sキーで保存できます。
Visual Basic Editor(VBE)を表示
VBAプログラムを編集できるエディタ(VBE)を表示してみます。
キーボードのALT+F11(ALTキーを押しながらF11キーを押す)でVBEを表示できます。さらにALT+F11を押すことにより、ExcelシートとVBEの表示切替が可能です。
参照設定
第1回でインストールしたSeleniumBasicを使用するため参照設定をします。
参照可能なライブラリ ファイルのリストをスクロールし、以下を探してチェックします。
Selenium Type Library
Excelシートに表を作成
図のようにExcelシートに表を作成してください。
今回はSBI証券にログインする方法を説明します。
ユーザー、パスワード欄は実際のSBI証券のものを入力ておきます。
URLは以下を入力しています。
https://site2.sbisec.co.jp
ユーザー・パスワードは、本来は、別シートや別ファイルに保存して暗号化しておくなど考えられますが、今回は単純化のため丸見えの状態になっています。取り扱いに注意して下さい。
ログインボタンを作成
図のようにメニューより開発>挿入>ボタンをクリックし、ボタンを配置したい場所をドラッグしてボタンを作成します。
作成したボタンを右クリックしてプロパティをクリックします。
プロパティウィンドウが表示されるので、Captionを「ログイン」に変更します。
ボタンの表示が「ログイン」に変わりました。
また、「デザインモード」がオンになっていることがわかります。ここをクリックする毎に「デザインモード」のオン、オフが切替わります。
プログラム完成後に実際に動作させるには、「デザインモード」をオフにしておく必要があります。
VBAプログラムの作成
それでは、VBAプログラムを記述していきます。
まずは、「デザインモード」がオンの状態で、先ほど作成したログインボタンをダブルクリックします。
VBEが開かれ、自動的に以下のプログラムコードが生成されます。
この部分がログインボタンがクリックされた時に実行されます。
Private SubからEnd SubまでがSubプロシージャと呼ばれ、この中に記述されたコードが実行されます。
Private Sub CommandButton1_Click()
End Sub
この2行の間に以下を追加します。
LoginSbi ActiveSheet
Private Sub CommandButton1_Click()
LoginSbi ActiveSheet
End Sub
プログラコードの意味は次回に説明します。
まずは以降に示すコードをコピー&ペーストして進めてください。
続いて、標準モジュールと呼ばれているものを追加します。
主にこの標準モジュールに実現したいことを記述していくことになります。
画面左の「Microsoft Excel Objects」を右クリックして、挿入>標準モジュールをクリックします。
Module1という標準モジュールが作成されるので、以下のコードを貼り付けます。
Option Explicit
Dim Driver As Selenium.WebDriver 'ブラウザドライバー
Const WaitTime As Integer = 3000 '待ち時間3秒(ミリ秒で指定)
'----------------------------------------
'ドライバー初期化
'----------------------------------------
Sub OpenDriver()
If Not Driver Is Nothing Then Exit Sub
Set Driver = New Selenium.WebDriver
SafeOpen Driver, Chrome
End Sub
'----------------------------------------
'SBI証券にログイン
'----------------------------------------
Sub LoginSbi(Sheet As Worksheet)
OpenDriver 'ドライバーの初期化
Driver.Get Sheet.Cells(2, 4) 'ログインページ表示
Driver.Wait WaitTime '3秒待つ
Driver.FindElementByName("user_id").SendKeys Sheet.Cells(2, 2) 'ユーザーを入力
Driver.FindElementByName("user_password").SendKeys Sheet.Cells(2, 3) 'パスワードを入力
Driver.FindElementByName("ACT_login").Click 'ログインボタンをクリック
Driver.Wait WaitTime '3秒待つ
End Sub
'----------------------------------------
'ドライバークローズ
'----------------------------------------
Sub CloseDriver()
On Error Resume Next
Driver.Close
Set Driver = Nothing
End Sub
次に、第1回でダウンロード、解凍した「WebDriverManager-for-VBA」を取り込みます。
解凍したファイルの中から「WebDriverManager4SeleniumBasic.bas」をドラッグし、標準モジュールにドロップします。
最後に、画面左の「ThisWorkBook」をダブルクリックして開き、以下のコードを貼り付けます。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
CloseDriver
End Sub
以上でプログラムコードの作成は終了です。
Ctrl+Sキーで保存しましょう。
VBEの画面は右上のx印をクリックするなどして閉じてしまって大丈夫です。
動作確認
実行する前に以下を確認してください。
Excelシートのユーザーとパスワードが正しく入力されているか。
「デザインモード」がオフになっているか。
確認できたら、ログインボタンをクリックしましょう。
Chromeが開かれて、SBI証券にログインできれば成功です。
うまくいかない場合は、このページの手順をもう一度確認してみて下さい。
どれかひとつでも間違うと正しく動作しません。
次回予告
比較的シンプルなコードでSBI証券のWebページにログインするExcelブックを作成できました。
次回はプログラムコードの簡単な解説、他の証券会社へのログインへの応用などを書いていこうと思います。
免責事項
この記事は、筆者の個人的な経験と知識に基づいて作成されたものであり、プログラミングに関する情報を提供することを目的としています。しかしながら、この記事に含まれる情報の正確性、完全性、有用性については保証するものではありません。
この記事を使用することで生じたあらゆる損害や不利益について、筆者は責任を負いかねます。自己責任において情報の利用をお願いします。