途中で投げ出す可能性大ですけど(笑)
ログイン画面
まずは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日興証券のお客様ログイン画面ですね。
URLを指定したら、画面が表示されるまで待ちます。
待たないで次の操作に進むとErrorが出てしまいます。
IE_Completeが表示待ちのプロシージャです。
至る所で見かけると思います。ええ、私もパクってきましたから。
コードは解説できないけど、インターネットエクスプローラーが忙しい間は待ってろよ、完了するまで待ってろよ、ってな意味だと思います。
ユーザー情報を入力
支店コード、口座番号、パスワードという項目があるので、そこを入力したあと、ログインボタンをクリックしたいと思います。
以下にコードを示します。
‘ユーザー情報
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を開いたら、右上の設定 ⇒ ツール ⇒ デベロッパーツールで起動します。
デベロッパーツールを起動すると、下の方にウィンドウが表示されると思います。
とりあえず意味がわからなくても、上のアドレスバーにSMBC日興証券のログイン画面のURLを入力してください。
するとログイン画面が表示され、下の方のウィンドウにソース(HTML)が記述されていると思います。
デベロッパーツールでHTMLを弄っても、サイトの内容は変更されませんが、数値を変えたりすることで、実際にサイトがどのように変化するかが目に見えてわかります。
そして今回は、デベロッパーツールの非常に便利な機能「要素の検証」を使います。
■要素の検証
支店コードのフォームにカーソルを合わせ、右クリック ⇒ 要素の検証
すると画面下のウィンドウに、支店コードのフォーム部分に該当するHTMLが表示されます。
該当する部分がハイライトで表示されます。
見てみると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 = “◇◇◇”
すると、以下のようにフォームに入力されます。
実際には△△△とかじゃなくて、ご自分の口座番号やパスワードを指定します。
そしたら、ログインボタンをクリックしてログイン完了。
となるはずでしたが、思いっきり手こずりました…
■ログインボタンをクリック
こいつをちょちょいのちょいと押すつもりだったのに、押せなくて苦労しましたよ。
ログインボタンの要素の検証をすると、以下のソース部分が該当します。
<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とかいうのを押してみると、こんなんが出てきた!
ログインボタンを押した先の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
なんだかよくわかんないけど、これでログインボタンを押せました。
ふう、疲れたよ…最後に完成したログインまでのコードを載せます。
ログイン用マクロ
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
ひっっっっっさしぶりにのぞいてみたら更新してるではないですか。お元気そうでなにより。復活なさるそうでおめでとうございます。私は2003年から続けた専業相場師稼業から完全に離れこの3月からリーマンしてます。根っからの社畜根性なのか7時50分からラジオ体操して夜まで残業する日々も悪くないかな?なあんて思ってます。シストレを極めるためにお芋さんのモノマネで必死に覚えた関数やVBAが今かなり役に立っていますwww。相場の世界でまたひと暴れして下さい。期待してます。
>元シストレ初心者さん
お久しぶりです!!
まだ復帰するかどうかは決まっていない、あいかわらず優柔不断の☆お芋ですw
ですが、コメントありがとうございます。
長らくの専業相場師稼業、本当にお疲れ様でした。
私も同時期から相場を始めたので、少し寂しい気もしますが、今の生活を良く思えているようで何よりです^^
僕も今の生活はとっても充実してるんので、お互いにいい日々を過ごしましょう。
また、ぜひコメントください。お待ちしています♪
ありがとうございます
結構大事になってしまわれたようですね。ご苦労さまでした^^
これからデベロッパーツールをダウンロードしてからエクセル触って動かしてみたいと思います。
日興は優待とIPOでしか使用してなかったので、これで他のトレードでも使えるかもしれない希望が出来ましたw(まだ動かしてませんけどw)
さぁこれでお芋さんもトレード再開に一歩踏み出しましたねw
お互い頑張りましょう^^
> acuoさん
いえいえ、いつも温かいコメントいただいているんで^^
私もどうせ発注マクロは作るつもりだったので、どうせだったらブログに公開しようと思いました。
また時間ができたら、ログイン後の発注マクロも載せるつもりです。
ざっと見た感じ、つまづかなければできそうな感じはしたので。
再開までの距離を少しずつ縮めていきます。笑