三流君 ken3のmemo置き場

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

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

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

終わりのあいさつ

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

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

先は長いかなぁ・・・・

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)