三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:「こんな感じ」や「あの、あの」と活舌の悪い、
三流プログラマーのオッサンです

当ブログではGoogle AdSenseおよび各種アフィリエイトプログラムを利用して広告を配信しています。

JRA IPATログインを例題に VBS で 新しいウインドウの処理を実験

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

終わりのあいさつ

今回も、コピペ(コピー貼りつけ)プログラムで失敗したけど、温かい目で見てください。

あとは、データ収集と実際の購入 サンプルですね。

先は長いかなぁ・・・・


質問・感想・クレームなど、
気軽にコメント欄に書いてもらえるとうれしいです。

当ブログではGoogle AdSenseおよび各種アフィリエイトプログラムを利用して広告を配信しています。


フッター:最後にKen3Videoの動画一覧を紹介します

YouTubeにアップした動画です。他の動画を一瞬でも見てもらえるとさらに嬉しいです。
再生リスト:[三流君Ken3の最新動画]←リストの一覧形式で表示する


また、ブログを見に来てくださいね。ではまたぁ~