暗証番号入力後、実行ボタンを押すと
入金します。よろしいですか?
と
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