三流君 ken3のmemo置き場

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

挨拶・自己紹介:「こんな感じ」や「あの、あの」と活舌の悪い、
三流プログラマーのオッサンです
Ken3三流君へ問い合わせ・連絡先:
[Ken3(管理者)へメッセージを送る], [YouTube動画にコメントを書く]
※↑質問・感想,コード修正・作成など気軽に送ってください。

暗証番号入力 confirm確認メッセージを無効にする JRA入出金メニュー

暗証番号入力後、実行ボタンを押すと

入金します。よろしいですか?

confirm で 確認メッセージが表示されます。

    if (errFlg == 0) {
      if (cmd == "EXEC") {
        if (confirm("入金します。よろしいですか?")) {
          frm.EXEC.disabled = true;
        } else {
          return false;
        }
      }
      frm.submit();

※これが、意外とやっかいで・・・

試行錯誤・テスト結果→ http://www.youtube.com/watch?v=SHyTGwhkNyI
www.youtube.com

小細工 同名関数を挿入して、常に はい を返す

javascriptの同名関数は標準関数よりも
後から追加したユーザー関数がエラーにならないで走ることを利用して、
ニセのconfirm関数(何もしないで常にtrueを返す)を挿入する

    '確認メッセージで はい を 答えたい ≠≒ 確認を必ず はい(true)にする
    Dim ele 'エレメント(script)を1つ作りたいので。
    Set ele = objIE_I.document.createElement("SCRIPT")
    
    ele.Type = "text/javascript"
    ele.Text = "function confirm() { return true; }"  'コードをセットする
    
    Call objIE_I.document.body.appendChild(ele)  '上↑で作った要素・エレメントをドキュメントに挿入する
    '※行儀が悪い方法だが、
    'javascriptの同名関数は標準関数よりも後から追加したユーザー関数がエラーにならないで走ることを利用

昔の実験元

VBA IE操作 ニセのpromptとalert() を 挿入する そんな実験
http://d.hatena.ne.jp/ken3memo/20100428/1272467509
http://www.youtube.com/watch?v=k6XIeMITqDg
www.youtube.com

も合せてみてください。

暗証番号を入力して、実行ボタンを押す

データの入力エリア input type="PASSWORD"

実行ボタンは type="BUTTON" name="EXEC"
だったので、
document.all("名前").Value で値、.Clickでボタンクリックしてみました。

    'input type="PASSWORD" size="9" maxlength="4" name="PASS_WORD" value="" 
    objIE_I.document.all("PASS_WORD").Value = strPassword   '暗証番号をセット

    '実行 input style="width:80px;" type="BUTTON" name="EXEC" value="実 行"
    objIE_I.document.all("EXEC").Click    '実行ボタンをクリック


完成した 入金処理のソース

金額や暗証番号の受け取りがまだだけど
(固定の金額、固定の番号)
下記のような感じで、コードを書きました。

strPassword = ""
'パスワード保存したくない人向け、頭で入力させる
If strPassword = "" Then
    strPassword = InputBox("暗証番号を入れてください")
End If


'複数立ち上がったIEから IPAT 投票メニューを見つける

    'オブジェクトを格納する変数
    Dim objShell, objWindow
    Dim objIE 

    'シェルのオブジェクトを作成する
    Set objShell = CreateObject("Shell.Application")

    Set objIE = Nothing    
    'ウインドウの数だけまわすぞ
    For Each objWindow In objShell.Windows
        'TypeNameでオブジェクト変数のタイプを表示する
        'HTMLDocumentだったら
        If TypeName(objWindow.document) = "HTMLDocument" Then
           If objWindow.document.URL = "https://www.ipat.jra.go.jp/pw_020_i.cgi" Then
               Set objIE = objWindow '見つけたウインドウを(IE)を代入
               Exit For   
           End IF
        End If
    Next
    Set objShell = Nothing

    '見つけたかチェック
    If objIE Is Nothing Then
        msgbox "エラー 投票メニューが見つかりません"
        wscript.quit
    End If   

'↑上で見つけたIPAT 投票メニューから 入出金メニュー を 押す

    'Aのタグを集める .getElementsByTagName("A")を使用
    Set objA = objIE.Document.getElementsByTagName("A")

    'ループで頭から表示してみる
    For n = 0 To objA.Length - 1
        '※.InnerHTMLじゃなくて、.OuterHTMLでAの全体を見る
        '入出金メニューのリンクを探す、ソースの文字を探す
        If InStr(objA(n).OuterHTML, "入出金メニュー") > 0 Then
            objA(n).Click  'クリックする
            Exit For  'ループを抜ける
        End If
    Next

    Set objA = Nothing  'オブジェクト変数解放

'表示を待つ
    Wscript.sleep 5000  '5秒待つ


'今度は、入出金メニュー(新しく開いたIE)を探す

    Dim objIE_I  '入出金メニュー用

    'シェルのオブジェクトを作成する
    Set objShell = CreateObject("Shell.Application")

    Set objIE_I = Nothing    
    'ウインドウの数だけまわすぞ
    For Each objWindow In objShell.Windows
        'TypeNameでオブジェクト変数のタイプを表示する
        'HTMLDocumentだったら
        If TypeName(objWindow.document) = "HTMLDocument" Then
           If InStr(objWindow.document.Title, "入出金メニュー") > 0 Then
               Set objIE_I = objWindow '見つけたウインドウを(IE)を代入
               Exit For   
           End IF
        End If
    Next
    Set objShell = Nothing

    '見つけたかチェック
    If objIE_I Is Nothing Then
        msgbox "エラー 入出金メニューが見つかりません"
        wscript.quit
    End If   

'入金指示 選択 の ボタン を 押す

    objIE_I.document.all("MENU1").Click

'画面の切り替わり 表示を待つ
    Wscript.sleep 5000  '5秒待つ


'金額を入れて 確認ボタンを押す
    'input type="text" name="NYUKIN" maxlength="9" size="25" value=""> 円
    objIE_I.document.all("NYUKIN").Value = 500  '値をセットする

    'input style="width:80px;" type="BUTTON" name="INPUT" value="確 認" onClick
    objIE_I.document.all("INPUT").Click    'クリックする

'画面の切り替わり 表示を待つ
Wscript.sleep 5000  '5秒待つ

'暗証番号を入れ、実行する

    '確認メッセージで はい を 答えたい ≠≒ 確認を必ず はい(true)にする
    Dim ele 'エレメント(script)を1つ作りたいので。
    Set ele = objIE_I.document.createElement("SCRIPT")
    
    ele.Type = "text/javascript"
    ele.Text = "function confirm() { return true; }"  'コードをセットする
    
    Call objIE_I.document.body.appendChild(ele)  '上↑で作った要素・エレメントをドキュメントに挿入する
    '※行儀が悪い方法だが、
    'javascriptの同名関数は標準関数よりも後から追加したユーザー関数がエラーにならないで走ることを利用

    'input type="PASSWORD" size="9" maxlength="4" name="PASS_WORD" value="" 
    objIE_I.document.all("PASS_WORD").Value = strPassword   '暗証番号をセット

    '実行 input style="width:80px;" type="BUTTON" name="EXEC" value="実 行"
    objIE_I.document.all("EXEC").Click    '実行ボタンをクリック


終わりの挨拶

自動でログイン後に、自動入金。
次は、オッズや情報を取得ですね。
そして、自動投票???と続くのかぁ、、、
まだまだ、依頼されたコードの完成までは先が長いですね。



余談.
押すことにこだわらないで、押させない、押す確認関数をつぶす。
'※読み込み完了後、自作のニセalertを追加する
'.navigate "JavaScript:でスクリプトの実行を利用して追加する
objIE.navigate "JavaScript:function alert() { return true; }"
みたいなことが最近(2018年)は、流行っているみたいですね。

www.youtube.com
【VBA IE操作】Javascriptのalert「Webページからのメッセージ」を消すテスト【三流君】 - YouTube

ken3memo.hatenablog.com



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

[Googleフォームにコメントを残す]
↑質問・コメントの入力フォームです、気軽に書いてください


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

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


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