[三流君] [VBAで楽しく] [VBA IE 操作]
−−> No.117 InternetExplorer操作 .Silentを使用したけど....

InternetExplorer操作 .Silentを使用したけど....

概要:
JavaScriptのalert警告メッセージを表示したくなかったので、
.Silent=Trueを使用したが、うまく行かなかった話です。
※逃げ手(代替案)も成果も無いメルマガでした。(笑)

※メルマガ記事ではオブジェクトの参照設定をしていませんができれば、下記を参考に参照設定してください。
[Microsoft Internet Controls,Microsoft HTML Object Library を参照設定する](このほうが開発時、操作時に楽)
また、VistaとIE7の場合は、 [IE7 操作 Vistaで失敗]も参考にしてください。

<InternetExplorer操作 .Silentを使用したけど....>

どうも、三流プログラマーのKen3です。 今回は、 InternetExplorerの操作で、.Silentを使用したけど、 JavaScriptの画面表示が止まらない、止めたい、そんなお話です。 なかなか、相手のIEお嬢様は強敵でした・・・

/* * 1.今回のキッカケ */

掲示板に下記の質問をもらいました。 ----- >IEのSilentをtrueにしても >JavaScriptのalert("あああ")は表示されてしまうの >でしょうか? >alertを表示しないようにするにはどのようにすればいいので >しょうか?教えてください。 ----- silent(無音)かぁ。

/* * 2..Silentプロパティ */

IEの.Silent、調べてみると、 http://msdn.microsoft.com/workshop/browser/webbrowser/reference/properties/silent.asp > Silent Property > Sets or retrieves a value that indicates whether > the object can show dialog boxes. だってさ、これを読者から教えてもらった、 エキサイトの翻訳 http://www.excite.co.jp/world/text/ にかけてみると > オブジェクトがダイアログ・ボックスを示すことができるかどうか示す値を > セットするか検索します。 だって、なんとなく、これでいいような気がするんだけど。。。。 > Dialog boxes and messages can be shown. > Critical errors and security alerts are not supressed. > true Dialog boxes are not shown. も変換すると、 >ダイアログ・ボックスとメッセージは示すことができます。 >重大なエラーおよびセキュリティ警報はsupressedされません。 >真実のダイアログ・ボックスは示されません。 セキュリティなど警告以外は、出来そうなんだけど・・・ ^^^^^^^^^^^^^^^^^^^^^^^^^^

/* * 3.実際にやってみる */

掲示板に書くって、よほどのことなんですよね。 あたりまえの話ですが、困っていて、四方八方探したけど出来なかったり。 だから、マニュアルに書いてあるだろ・・できるハズだ!!なんて言わないで、 まてよ?と思いテストしてみる。 http://www.ken3.org/vba/test117.html に下記のHTMLを作成しました。 <BODY> <h1>メッセージ画面が表示されるWebページあるよね</h1> <hr> <script type="text/javascript"> <!-- alert("Helloとかやられると・・・"); // --> </script> <noscript> JavaScriptONでテストしてください。 </noscript> まったく(笑)自動巡回だと困るんだよね・・・(オイオイ) </BODY> と、 alert("Helloとかやられると・・・"); で、画面にメッセージボックスを出してみました。 まずは、 http://www.ken3.org/vba/test117.html でテストすると、おっ、簡単にメッセージ出せますね。 下記のような、巡回プログラムだと、 オイオイ、ずっと.Busy=Trueのままで、ループから抜けれない・・・ 原因は、alertで画面にダイアログが表示されているから、 そこから先に読みに行かない。
Sub ie_test()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/vba/test117.html"

    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     MsgBox "巡回終了"

End Sub
そこで、 .Silent = True コイツの出番でしょ。 ^^^^^^^^^^^^^^^ 下記のように組み込んで実行する・・・結果は、
Sub ie_test_Silent()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)
    
    '.Silentを使ってみた が True/False どちらもダメだった・・・
    objIE.Silent = True   'なんで効かないの?

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/vba/test117.html"
    
    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     MsgBox "巡回終了"

End Sub
実行結果は、同じだった・・・ オイオイ、勘弁してよ・・・ こうなったら、スクリプトをツブシテヤル。 読み込み完了後に、""をセットしてスクリプトを消してやるぞ、 といきがって下記のようにしてみるが・・・ HTMLソースの読み込み完了を .ReadyState で判断後、 objIE.Document.Scripts(0).Text = "" と、スクリプトのオブジェクトをつぶしにかかるが、、、 ダメでした。
Sub ie_test_ReadyState()

    Dim objIE    As InternetExplorer   'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)
    
    '.Silentを使ってみた が True/False どちらもダメだった・・・
    objIE.Silent = True   'なんで効かないの?

    '文字列で指定したURLに飛ぶ
    Debug.Print ".ReadyState=" & objIE.ReadyState
    objIE.Navigate "http://www.ken3.org/vba/test117.html"
    Debug.Print ".ReadyState=" & objIE.ReadyState

    '.ReadyState=1を判断する(ロード中以外になったら抜ける)
    Do While objIE.ReadyState = 1 'READYSTATE_LOAD = 1
        DoEvents
        Debug.Print ".ReadyState=" & objIE.ReadyState
    Loop
    
    Debug.Print objIE.Document.documentElement.outerHTML

    'スクリプトをつぶす(オイオイ)
    objIE.Document.Scripts(0).Text = ""

    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     MsgBox "巡回終了"

End Sub
余談:HTMLソースの表示 ^^^^^^^^^^^^^^^^^^^^^ Debug.Print objIE.Document.documentElement.outerHTML と .Document.documentElement.outerHTML で表示できました。 前、.Document.All(0) としてましたが。 まぁ、お好きなほうで。

/* * 4.いい加減、頭にくるが、フト初心に帰ると・・・ */

いい加減、出来なくて、頭にきます。 .Silentなんで効かないんだよ。 ^^^^^^^ 一流読者の心の声:バカな三流プログラマーが吠えてるよ。 ~~~~~~~~~~~~~~~~~ alertって日本語に直してみろよボケ? 警戒だって、、あっ、警告メッセージは.Silentできないのか? それは、あたりまえってこと? JavaScriptの解説ページ、ほとんどが、 メッセージのダイアログ表示をaleatで説明しているけど、 う〜ん・・・ こんにちは と 警告しているサイトが日本には多いのか。 まぁ、ホントに18歳以下禁止です、と警告メッセージしているのもあるけど。

/* * 5.セキュリティの設定 */

あとは、セキュリティの設定でJavaScriptなどをOFFにしてから巡回作業。 そんな感じなんだけど、セキュリティをいじる、そんな簡単なプロパティが無い。 ※あったら、マズイんだけど。。。

/* * 6.終わりの挨拶 */

今回は、 IEの操作で、 .Silent = True を探ってみました。 が、かわす代替案も無く、意味無いメルマガになってしまった・・・ 私も作ろうとしている(闇の違法ツール?) ^^^^^^^^^^^^^^^^^^^^ 自動巡回プログラムでは、こんにちはの挨拶メッセージで止まる、 自動データ登録処理では、"登録します"のメッセージでやられそう・・ う〜ん・・・ 不思議なIEお嬢様、まだまだ攻略できそうにないよね。 えっ、Excel姫やAccessお姉さまも攻略して無いダロって? ※う〜ん、実力無くて、なかなか、攻略できなくて。。。。 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

フィードバック

読者様より、下記のメッセージをいただきました。
------
>いつも拝見させていただいています。
>
>「InternetExplorer操作 .Silentを使用したけど....」についてですが、
>IEのツール→インターネットオプション→セキュリティ→レベルのカスタ
>マイズでアクティブスクリプトを無効にすれば巡回できるようになると
>思います。
>
>私も長い間この問題をクリアしようとあれこれ探していたのですが、
>現時点では以上の方法でなんとかしています。
>
>参考になれば幸いです
-----
なかなか、大変みたいですね・・・。

2013/03/21 UWSCを使ってみてはと下記の書き込みをいただきました。


UWSCというスクリプトソフトを使って、バックグランドで起動し、アラート画面が表示されたらウィンドアクティブにしてOKボタンを押すことが可能です。

WHILE TRUE
WID=GETID("記述:")
CTRLWIN(WID, ACTIVATE)
SCKEY(WID, VK_ENTER)
WEND

サンプルソースです。


ページフッター リンクや広告、質問送信など

三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。

[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]

大分類:[Document.Forms(入力処理)] / [Document.Links(リンク情報)] / [Document.Images(画像情報)] / [Document.Frames(フレーム処理)]
サンプル・例題:[過去のメルマガ記事一覧] / [少し大きなIE操作サンプル] / [小さなコードでIE操作の動作確認]

F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。
なれると当たり前に操作している方法が↓かなぁ。
[F1ヘルプ マクロ記録ほか]・・・基本のF1を押してヘルプを見る方法など
[実行時エラー、デバッグモード]・・・デバッグの流れを簡単に(ハマった時はツライけど)
[イミディエイト ウインドウ と Debug.Print]・・・プログラム作成時に便利なイミディエイト ウインドウ
[VBA ウォッチ式とSTOPを使ってみた]・・・STOPで止め、ウォッチ式でオブジェクトの中身を確認する方法など
[参照設定のお話]・・・設定すると便利な(設定しないと使えない)、参照設定のお話

項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。
[プログラムは心? spirit]・・・プログラマー 心・気質・魂
[学ぶ study]・・・学習、技術の取得
[仕様書 doc]・・・仕様書・設計書関係の話

項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
[VBAでIE ウェブブラウザーを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[MSアクセス から エクセル を呼ぶ Excel.Application]・・・AccessからExcelを操作したりデータの書き出しなどです
[アウトルック メールの操作 Outlook.Application]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[エクセル ユーザーフォームを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[エクセルからアクセスを操作する]・・・ExcelからAccessのマクロを起動してみました、
[エクセル関係 関数、その他]・・・その他Excel関係です

Access関係:
[アクセス ユーザーフォーム/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[アクセス レポート操作]・・・レポートを操作してみました
[アクセス クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[テキストファイルの操作(Open,Close,Print,Input)]・・・普通のテキストファイルを使ったサンプルです

Blog:[三流君の作業日記]/ [objIEを使用したサンプルコードを見る]/ 広告-[通販人気商品の足跡]

質問や要望など メッセージを送る(三流君に連絡する)

三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。

感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。

あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい



(感想や質問・要望 メッセージはHPで記事に載せることがあります。)

急ぎで連絡がほしい、そんな時は:[三流君連絡先]に連絡してください。



[トップページへ 戻る] / [VBA TOP] / [WebBrowser IEの操作 TOPへ]