VBAでIE操作を行い、SMBC日興証券にログインをするマクロ

リクエストがあったので、ちょっと頑張ってみます。
途中で投げ出す可能性大ですけど(笑)

VBAでIE制御

 icon-check-square-o ログイン画面

まずはSMBC日興証券のログイン画面に行きます。
お馴染みのコードだと思うので、説明は簡単にしますね。

というか、詳しく解説できるほどの知識はないし(笑)
以下がログイン画面を開くまでのコードです。

Sub SMBC_Login()

‘変数の宣言
Dim objIE As Object
Dim objTag As Object

‘お約束
Set objIE = CreateObject(“InternetExplorer.application”)
objIE.Visible = True

‘ログイン画面
objIE.navigate “https://trade.smbcnikko.co.jp/Login/0/login/ipan_web/hyoji/”
IE_Complete objIE

End Sub

‘表示完了まで待つ
Sub IE_Complete(ByVal objIE As Object)

Do While objIE.Busy = True
DoEvents
Loop
Do While objIE.Document.readyState <> “complete”
DoEvents
Loop

End Sub

オブジェクト型の変数をセットしたあと、8~9行はIE制御のお約束。
私も未だに、よく意味はわかってません。

8行目は、変数ObjIEに、インターネットエクスプローラーというアプリケーションのオブジェクトを代入する。

9行目は、可視化する(見えるようにする)。
って、感じだと思います、たぶん。

そしたら次は、12行目のnavigateで目的のURLに飛びます。
この場合は、SMBC日興証券のお客様ログイン画面ですね。

SMBC1

URLを指定したら、画面が表示されるまで待ちます。
待たないで次の操作に進むとErrorが出てしまいます。

IE_Completeが表示待ちのプロシージャです。
至る所で見かけると思います。ええ、私もパクってきましたから。

コードは解説できないけど、インターネットエクスプローラーが忙しい間は待ってろよ、完了するまで待ってろよ、ってな意味だと思います。


 icon-check-square-o ユーザー情報を入力

支店コード、口座番号、パスワードという項目があるので、そこを入力したあと、ログインボタンをクリックしたいと思います。

以下にコードを示します。

‘ユーザー情報
objIE.Document.all.koza1.Value = “〇〇〇”
objIE.Document.all.koza2.Value = “△△△”
objIE.Document.all.passwd.Value = “◇◇◇”

‘ログインボタン
For Each objTag In objIE.Document.getElementsByTagName(“input”)
If objTag.src = “https://trade.smbcnikko.co.jp/img/login_help_btn_001.gif” Then
objTag.Click
Exit For
End If
Next

これはちょっと解説が必要だと思うので、頑張ってみますね。

マクロの作成には、GoogleChromeのデベロッパーツールを使います。
パソコンにない方は、ダウンロードしてください。きっと便利です。


■デベロッパーツールを起動

GoogleChromeを開いたら、右上の設定 ⇒ ツール ⇒ デベロッパーツールで起動します。

SMBC2
※クリックすると画像は拡大します

デベロッパーツールを起動すると、下の方にウィンドウが表示されると思います。
とりあえず意味がわからなくても、上のアドレスバーにSMBC日興証券のログイン画面のURLを入力してください。

SMBC3
※画像をクリックすると拡大します

するとログイン画面が表示され、下の方のウィンドウにソース(HTML)が記述されていると思います。

デベロッパーツールでHTMLを弄っても、サイトの内容は変更されませんが、数値を変えたりすることで、実際にサイトがどのように変化するかが目に見えてわかります。

そして今回は、デベロッパーツールの非常に便利な機能「要素の検証」を使います。


■要素の検証

支店コードのフォームにカーソルを合わせ、右クリック ⇒ 要素の検証

SMBC4

すると画面下のウィンドウに、支店コードのフォーム部分に該当するHTMLが表示されます。

SMBC5
※画像をクリックすると拡大します

該当する部分がハイライトで表示されます。
見てみるとname=”koza1″となっています。

<input type="text" name="koza1" maxlength="3" size="10" value="" style="ime-mode:disabled; width:100px; vertical-align:top;" tabindex="1" onfocus="change_focus('0')" id="padInput0" class="padInput">

nameがついてるとラクなんですよねえ。
私もサイトを作る際には、タグに必ずネームをつけよう。

objIE.Document.all.koza1.Value = “〇〇〇”
とすることで、支店コードのフォームに入力します。正確には、引き渡すとでも言うのかな?

口座番号とパスワードも同様に、要素を検証してnameを探します。
もう一度、その部分のコードを載せます。

‘ユーザー情報
objIE.Document.all.koza1.Value = “〇〇〇”
objIE.Document.all.koza2.Value = “△△△”
objIE.Document.all.passwd.Value = “◇◇◇”

すると、以下のようにフォームに入力されます。
実際には△△△とかじゃなくて、ご自分の口座番号やパスワードを指定します。

SMBC6

そしたら、ログインボタンをクリックしてログイン完了。
となるはずでしたが、思いっきり手こずりました…


■ログインボタンをクリック

SMBC7

こいつをちょちょいのちょいと押すつもりだったのに、押せなくて苦労しましたよ。
ログインボタンの要素の検証をすると、以下のソース部分が該当します。

<input border="0" type="IMAGE" name="" alt="ログイン" src="/img/login_help_btn_001.gif" tabindex="4">

ふむふむ、name=””か。ちゃんと名前つけてよね!
でも、alt=”ログイン”ってなってるな。これはFor Eachを使えば押せそう。

For Each ObjTag In ObjIE.document.all
If ObjTag.innerText = “ログイン” Then
ObjTag.Click
Exit For
End If
Next

ってことで、こんなコードを書いてみたんだけど、これだと押せませんでした。
なんで押せないのか、優しい人コメント欄で教えて!

document.allをgetElementsByTagName(“INPUT”)
にしてもダメ、インナーテキストをアウターテキストにしてもダメ。

うーん、今まではこのコードを弄ってれば、ほとんどのボタンは押せたんですけどね。
やっぱり基礎ができていないのが、ここにきて如実にあらわれてしまった。

いちおうこんな感じで、Submitを使えばできるんだけど。
ObjIE.document.forms(1).Submit

でも、これだとなんか嫌だよ。
そもそもSubmitの意味、イマイチわかってないし。  

ということで、試行錯誤数時間の末。
src=”/img/login_help_btn_001.gif”

gif(画像拡張子)のリンク先のURLを直接、探ってみることにしました。 
デベロッパーツールのウィンドウのメニュー?のResourcesとかいうのを押してみると、こんなんが出てきた!                          

SMBC8

ログインボタンを押した先のURLっぽいのが出てきました。
なので、人様のコードを参考に以下を作成。

‘ログインボタン
For Each objTag In objIE.Document.getElementsByTagName(“input”)
If objTag.src = “https://trade.smbcnikko.co.jp/img/login_help_btn_001.gif” Then
objTag.Click
Exit For
End If
Next

なんだかよくわかんないけど、これでログインボタンを押せました。
ふう、疲れたよ…最後に完成したログインまでのコードを載せます。


 icon-check-square-o ログイン用マクロ
Sub SMBC_Login()

‘変数の宣言
Dim objIE As Object
Dim objTag As Object

‘お約束
Set objIE = CreateObject(“InternetExplorer.application”)
objIE.Visible = True

‘ログイン画面
objIE.navigate “https://trade.smbcnikko.co.jp/Login/0/login/ipan_web/hyoji/”
IE_Complete objIE

‘ユーザー情報
objIE.Document.all.koza1.Value = “支店コード”
objIE.Document.all.koza2.Value = “口座番号”
objIE.Document.all.passwd.Value = “パスワード”

‘ログインボタン
For Each objTag In objIE.Document.getElementsByTagName(“input”)
If objTag.src = “https://trade.smbcnikko.co.jp/img/login_help_btn_001.gif” Then
objTag.Click
Exit For
End If
Next

End Sub

‘表示完了まで待つ
Sub IE_Complete(ByVal objIE As Object)

Do While objIE.Busy = True
DoEvents
Loop
Do While objIE.Document.readyState <> “complete”
DoEvents
Loop

End Sub