IE操作で下記の質問をいただく
>今、壁にぶつかったのが
>「******確認」のボタンをクリックすると
>「Web ページからのメッセージ」
>が出て、その後のプログラムが全く走りません。
>「非同期」等の記事を読ませてもらいましたが、私には難解で先に進めません。
>何卒解決のヒントをご教示していただけないでしょうか。
↓いつもの酔っ払い解説動画・・・
www.youtube.com
【VBA IE操作】Javascriptのalert「Webページからのメッセージ」を消すテスト【三流君】 - YouTube
1.テスト環境、再現環境を作る
表示が
「Web ページからのメッセージ」
なので、
テストページでJavascript alertメッセージを使用している
http://www.ken3.org/vba/test153.html
を使ってみる。
'テスト、IE SELECTタグ 選択後、Javascriptのalertメッセが表示される。 Sub ie_test_20180418_001() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ(テストのHTMLを表示する) objIE.Navigate "http://www.ken3.org/vba/test155.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '場名を選択する 'SELECTタグに付いた名前(Name)がJYOの上から3番目(2)をテストでセット '.SelectedIndexに2をセット(012345で2番目となる) objIE.Document.all.JYO.SelectedIndex = 2 '選択後にonchangeのイベントを発生させる objIE.Document.all.JYO.fireEvent ("onchange") 'レースを選択する 'Raceの上から3番目(2)をテストで選択する.SelectedIndexに2をセット objIE.Document.all.Race.SelectedIndex = 2 objIE.Document.all.Race.fireEvent ("onchange") '変更時のイベントを発生させる End Sub
2.OKボタンを押す を メッセージを表示させない に 読み替える
次に、素直な人は、流れ的には、
表示された
「Web ページからのメッセージ」
のOKボタンを押す
なんですが、
これを
メッセージを表示させない、
Javascriptのalert関数を無効にする
そんな処理を行ってみます。
昔のサンプルだと、
暗証番号入力 confirm確認メッセージを無効にする JRA入出金メニュー
ken3memo.hatenablog.com
や
VBA IE操作 ニセのpromptとalert() を 挿入する そんな実験
ken3memo.hatenablog.com
で
'暗証番号を入れ、実行する '確認メッセージで はい を 答えたい ≠≒ 確認を必ず はい(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の同名関数は標準関数よりも後から追加したユーザー関数がエラーにならないで走ることを利用
↑みたいに、していましたが、
最近流行の言葉使いは、
objIE.navigate "JavaScript:function alert() { return true; }"
みたいに、
魔法の一行じゃなけど、
alert関数で何もしない JavaScriptを追加する書き方が多いかなぁ。
これを使うと、
標準のメッセージ表示動作が何もしない動作になるので、
OKボタンを押させるよりも簡単かなぁ。
'IE SELECTタグ 選択後、Javascriptの標準のalertメッセを回避したかったので 'テスト、ページ読み込み完了後 '.navigate "JavaScript:function alert() { return true; }" '↑Javascript 関数を追加する Sub ie_test_20180418_002() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ(テストのHTMLを表示する) objIE.navigate "http://www.ken3.org/vba/test153.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop 'waitを入れたほうがいいかも? 'ここがポイント 2018/04/18 '※読み込み完了後、自作のニセalertを追加する '.navigate "JavaScript:でスクリプトの実行を利用して追加する objIE.navigate "JavaScript:function alert() { return true; }" '場名を選択する 'SELECTタグに付いた名前(Name)がJYOの上から3番目(2)をテストでセット '.SelectedIndexに2をセット(012345で2番目となる) objIE.Document.all.JYO.SelectedIndex = 2 '選択後にonchangeのイベントを発生させる objIE.Document.all.JYO.fireEvent ("onchange") 'レースを選択する 'Raceの上から3番目(2)をテストで選択する.SelectedIndexに2をセット objIE.Document.all.Race.SelectedIndex = 2 objIE.Document.all.Race.fireEvent ("onchange") '変更時のイベントを発生させる End Sub
メッセージが
alertなら
objIE.navigate "JavaScript:function alert() { return true; }"
confirmなら
objIE.navigate "JavaScript:function confirm() { return true; }"
を読み込み後に入れてみては?
解決の糸口となれば幸いです。 三流プログラマー Ken3
※冒頭と一緒です。↓いつもの酔っ払い解説動画・・・
www.youtube.com
【VBA IE操作】Javascriptのalert「Webページからのメッセージ」を消すテスト【三流君】 - YouTube