VBS から IEを使用して、
楽天市場にログインするスクリプトを作成してみたいと思います
作成手順
おおざっぱな作成手順と解説です。
※動画解説と合せてみてください。
試行錯誤の解説動画
解説動画 → http://www.youtube.com/watch?v=rWRiG-DP_ms
www.youtube.com
↑こんな感じで、作成・テストしています
1.ログインページのソースを確認します。
まず、
ログインページのソース、
https://www.rakuten.co.jp/myrakuten/login.html
を見て
使用する項目を抜き出します。
※ここでは、下記のようにな ユーザID,パスワード,次へのボタンです。
ユーザID input type="text" name="u" value="" size=25 id="userid">
パスワード input type="password" name="p" value="" size=25 id="passwd">
ログインボタン input type="submit" value=" 次へ "
項目を抜き出します
※id=やname=を抜き出します。
2.データをセットします .getElementsByName使用
データをセットします。
データのセット方法はイロイロあるのですが、
name="u"とname="p"がわかっているので、
.getElementsByName を 使用して、該当オブジェクト(エレメント)を探してみました。
'ユーザー-ID(name=u)にセットする。 Set objU = objIE.Document.getElementsByName("u") '変数に一度セットする If objU.Length = 0 Then '.Lengthで 取得したエレメントの数がわかります '終了処理/エラー処理 0の時は見つからなかったので Msgbox "ログインページが変わったか?メンテ中?です。表示されている内容を確認してください" WScript.Quit 'スクリプトを途中で抜ける End If objU(0).Value = strUID 'データをセットする Set objU = Nothing 'オブジェクト変数解放 'パスワード(name=p)にセットする。 objIE.Document.getElementsByName("p").Item(0).Value = strPassword 'セットする
テスト時に、データがセットされたか?目で確認しました。
3.次へのボタンを探し、押します。
次へのボタンを探して、.Clickします。
.getElementsByTagName("INPUT")でINPUTのオブジェクトを集めて、
.Valueの値を 文字列操作関数 Instr を使用して、探します。
オブジェクトが(type="submitボタンが)見つかったら
.Click
で、ボタンを押す動作、メソッドを見つけたボタンに対して実行しました。
'次へ ボタンを探して押す 'input type="submit" value=" 次へ "> を 探す 'INPUTのタグを集める .getElementsByTagName("INPUT")を使用 Set objINPUT = objIE.Document.getElementsByTagName("INPUT") 'ループで頭からテキストが 次へ を探す For n = 0 To objINPUT.Length - 1 '※ type="submitボタンなので、.InnerTextじゃなくて、.Valueです ※※注意 If Instr(objINPUT(n).Value,"次へ") > 0 Then '文字列の中から見つけたら objINPUT(n).Click '見つけたINPUTタグのオブジェクトをクリック Exit For End If Next Set objINPUT = Nothing 'オブジェクト変数解放
完成したソース 全体
作成したソース全体です。
xxxxxx.vbs で 保存して、テストしてみてください。
'頭で固定値をセットする 自分の番号をセットする。 strUID = "test@test.test" 'ユーザー-ID、メールアドレスの人もいる strPassword = "1234" 'パスワードあまりスクリプトには保存したくないけど 'パスワード保存したくない人向け、頭で入力させる If strPassword = "" Then strPassword = InputBox("パスワードを入れてください") End If 'IEの起動 Dim objIE '変数を定義します。 Set objIE = WScript.CreateObject("InternetExplorer.Application") 'オブジェクト作成 objIE.Visible = True '可視、Trueで見えるようにします。 '処理したいページを表示します。 'ここでは、楽天のログインページを直接呼びます objIE.Navigate "https://www.rakuten.co.jp/myrakuten/login.html" 'ページの表示完了を待ちます。 While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。 WScript.Sleep 100 '0.1秒待つ 1000で1秒 Wend 'ユーザー-ID(name=u)にセットする。 Set objU = objIE.Document.getElementsByName("u") '変数に一度セットする If objU.Length = 0 Then '.Lengthで 取得したエレメントの数がわかります '終了処理/エラー処理 0の時は見つからなかったので Msgbox "ログインページが変わったか?メンテ中?です。表示されている内容を確認してください" WScript.Quit 'スクリプトを途中で抜ける End If objU(0).Value = strUID 'データをセットする Set objU = Nothing 'オブジェクト変数解放 'パスワード(name=p)にセットする。 objIE.Document.getElementsByName("p").Item(0).Value = strPassword 'セットする '次へ ボタンを探して押す 'input type="submit" value=" 次へ "> を 探す 'INPUTのタグを集める .getElementsByTagName("INPUT")を使用 Set objINPUT = objIE.Document.getElementsByTagName("INPUT") 'ループで頭からテキストが 次へ を探す For n = 0 To objINPUT.Length - 1 '※ type="submitボタンなので、.InnerTextじゃなくて、.Valueです ※※注意 If Instr(objINPUT(n).Value,"次へ") > 0 Then '文字列の中から見つけたら objINPUT(n).Click '見つけたINPUTタグのオブジェクトをクリック Exit For End If Next Set objINPUT = Nothing 'オブジェクト変数解放 'ここからログイン後に自動化したい処理がイロイロとあるんだけど....
終わりのあいさつ
ログインから先の処理を行って、最後はログアウト・・・なんだけど、
まぁ、はじめの一歩ってことで。
IEを使用した、自動ログイン処理作成の参考となれば幸いです。
2011-07-22 追記
楽天ツールバー使用時の自動ログイン処理をVBSでテスト/デバッグ
http://d.hatena.ne.jp/ken3memo/20110722/1311345764
↑を見てください。
※今思えば、どちらからのログインでもポイント加算はOKかもしれないけど。。。