私は VB.net で webcrawler に取り組んでおり、System.Forms.WebBrowser オブジェクトを使用して、javascript またはフォーム投稿を使用するサイトでのナビゲーションを処理していますが、問題があります。フォーム ポストが読み込まれたページに戻る (WebBrowser.GoBack()) と、ページの有効期限が切れており、要求を再送信するために更新を行う必要があります。更新 (WebBrowser.Refresh()) を呼び出すと、確認のダイアログ ボックスが表示されます。このモーダル ダイアログをコードで回避する方法はありますか? ありがとう!
3 に答える
System.Windows.Forms.WebBrowserRefreshOption 型の更新オプションを渡すことができる場合があります。
ここで説明されているいくつかのオプションがあります:
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowserrefreshoption.aspx
オプションは、Web ブラウザーの更新をプログラムで制御できる唯一の方法のようです。
JavaScript の警告とともにポップアップが表示されるという同様の問題がありました。イベントを使用してなんとか抑制できましたwindow_error
。
browser_completed
次の行をイベント ハンドラーに追加しました。
((WebBrowser)sender).Document.Window.Error +=
new HtmlElementErrorEventHandler(Window_Error);
ここに私のwindow_error
イベントハンドラがあります:
void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
e.Handled = true;
}
考えるべきもう 1 つのオプションは、 をいじることthis._browser.ScriptErrorsSuppressed
です。スクリプト エラーが発生していないことは確かですが、試してみる価値はあります。
ここでこの問題を解決するための回避策/ハックを見つけました: http://www.experts-exchange.com/Programming/Languages/.NET/Q_25160302.html
基本的には次のようにします。
Browser.Refresh(WebBrowserRefreshOption.Completely);
SendKeys.Send("{Enter}");
このSendKeys.Send("{Enter}");
行は、削除したいモーダル ダイアログであるアクティブ ウィンドウに Enter キーを送信します。