JRA IPATのログイン処理で、INET-ID入力後、ログインボタンを押すと、
新しいウインドウ(IE)が立ち上がるので、
あたらしいIEを取得後、データをセットしてみます。
解説の動画 http://www.youtube.com/watch?v=jqbCQEh37PI を見てください。
www.youtube.com
0:00〜 新しいウインドウ(IE)を変数に取得する
'シェルのオブジェクトを作成後、一番後ろを取り出す
Set objShell = WScript.CreateObject("Shell.Application")
Set objNewIE = objShell.Windows(objShell.Windows.Count - 1) '最後のウインドウと決めつけセット
Set objShell = Nothing 'オブジェクト変数解放
で、手抜きで作ってみました。
3:07〜 値をセットする
新しいウインドウを(objNewIEに)取得したら、
データをセットします
'名前が i,p,r にそれぞれセットする。 セットする場所が objNewIEに注意
objNewIE.Document.forms("FORM1").Item("i").Value = strK_No '加入者番号
objNewIE.Document.forms("FORM2").Item("p").Value = strPassword '暗証番号
objNewIE.Document.forms("FORM3").Item("r").Value = strP_ARS 'P-ARS
↑ソースを表示して、Form1,2,3で区切られていたので、素直に
オブジェクト.Document.forms("フォーム名").Item("項目名").Value = で 値をセットしました。
5:56 〜 IPATメニューへ を クリックする
値をセットしたら
a href="#" onClick="JavaScript:Chk();return false;" title="IPATメニューへ"> 完成したソース
xxxx.vbs など、.vbsで保存して、使ってみてください。
'頭で固定値をセットする 自分の番号をセットする。 strINET_ID = "S999999PC" 'INET-ID strP_ARS = "0000" 'P-ARS strK_No = "60099999" '加入者番号 strPassword = "1234" '暗証番号、あまり保存したくないけど 'パスワード保存したくない人向け、頭で入力させる If strPassword = "" Then strPassword = InputBox("暗証番号を入れてください") End If 'IEの起動 Dim objNewIE '新しいIEのオブジェクト Dim objIE '変数を定義します。 Set objIE = WScript.CreateObject("InternetExplorer.Application", "IEMain_") 'オブジェクト作成 objIE.Visible = True '可視、Trueで見えるようにします。 '処理したいページを表示します。 objIE.Navigate "http://www.ipat.jra.go.jp/" 'ページの表示完了を待ちます。 While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。 WScript.Sleep 100 '0.1秒待つ 1000で1秒 Wend 'INET-ID(name=inetid)にセットする。 Set objINETID = objIE.Document.getElementsByName("inetid") '変数に一度セットする If objINETID.Length = 0 Then '.Lengthで 取得したエレメントの数がわかります '終了処理/エラー処理 0の時は見つからなかったので Msgbox "時間外です。 時間と表示されている場所を確認してください" WScript.Quit 'スクリプトを途中で抜ける End If objINETID(0).Value = strINET_ID 'データをセットする Set objINETID = Nothing 'オブジェクト変数解放 'ログインボタンを探して押す 'Aのタグを集める Set objA = objIE.Document.getElementsByTagName("A") 'ループで頭からタイトルがログインを探す For n = 0 To objA.Length - 1 If objA(n).Title = "ログイン" then objA(n).Click '見つけたAタグのオブジェクトをクリック Exit For End If Next Set objA = Nothing 'オブジェクト変数解放 '手抜きで、ログイン判断で5秒待つ? WScript.Sleep 5000 '5秒待つ 1000で1秒 'シェルのオブジェクトを作成後、一番後ろを取り出す Set objShell = WScript.CreateObject("Shell.Application") Set objNewIE = objShell.Windows(objShell.Windows.Count - 1) '最後のウインドウと決めつけセット Set objShell = Nothing 'オブジェクト変数解放 'ページの表示完了を待ちます。 While objNewIE.ReadyState <> 4 Or objNewIE.Busy = True '.ReadyState <> 4の間まわる。 WScript.Sleep 100 '0.1秒待つ 1000で1秒 Wend '新しく開いたIEに値をセットする 'エラー画面か?項目名iの数でチェックする Set objI = objNewIE.Document.getElementsByName("i") '変数に一度セットする If objI.Length = 0 Then '.Lengthで 取得したエレメントの数がわかります '終了処理/エラー処理 0の時は見つからなかったので Msgbox "INET-IDがエラーです確認してください。" objNewIE.Quit '新しく開いたIEを閉じる objIE.Quit '元のIEも閉じる WScript.Quit 'スクリプトを途中で強制終了 End If Set objI = Nothing '名前が i,p,r にそれぞれセットする。 セットする場所が objNewIEに注意 objNewIE.Document.forms("FORM1").Item("i").Value = strK_No '加入者番号 objNewIE.Document.forms("FORM2").Item("p").Value = strPassword '暗証番号 objNewIE.Document.forms("FORM3").Item("r").Value = strP_ARS 'P-ARS '↑同じ名称が使われているので、forms("FORM1"),2,3を指定しました。 'IPATメニューへ を クリックする 'Aのタグを集める Set objA = objNewIE.Document.getElementsByTagName("A") 'ループで頭からタイトルがログインを探す For n = 0 To objA.Length - 1 If objA(n).Title = "IPATメニューへ" then objA(n).Click '見つけたAタグのオブジェクトをクリック Exit For End If Next Set objA = Nothing 'オブジェクト変数解放 msgbox "ログイン スクリプト 終了 " 'ここから、データ取得や投票を行う、そんなスクリプトを書く WScript.Quit 'スクリプトを終了 '------------------------------------------------ '元IE(のイベント処理) 'スクリプトも終了処理 Sub IEMain_OnQuit() Msgbox "終了します" WScript.Quit 'スクリプトを途中で抜ける End Sub 'ウインドウを開く前のアクション Sub IEMain_BeforeNavigate2(ByVal pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel) End Sub '本当は、こっちで取得したかったけど・・・ Sub IEMain_NewWindow2(ppDisp, Cancel) End Sub
終わりのあいさつ
今回も、コピペ(コピー貼りつけ)プログラムで失敗したけど、温かい目で見てください。
あとは、データ収集と実際の購入 サンプルですね。
先は長いかなぁ・・・・