WebBrowserで、JavaScriptを含んだ読み込み完了を待機する
WebBrowserがサイトの読み込みを完了すると、DocumentCompletedイベントが発生するが、
これはサイトのデータを読み込み完了したタイミングである。
読み込み完了後に実行されるJavaScript等で、サイトが変化した後の内容を取得したい場合は
下記のように、内容を比較し、変化が無くなるまで待機する必要がある。
(常時どこかしらが更新されるようなサイトの場合、無限ループに陥るので注意。)
private async void ClsWebBrowserCustom_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
await Task.Run(() =>
{
int intSleepTime = 250;
Application.DoEvents();
// WebBrowserの読み込み完了まで待機
do
{
if ((this.IsBusy == false) && (this.ReadyState == WebBrowserReadyState.Complete) && (this.Document.Body.InnerHtml != null))
{
break;
}
else
{
Thread.Sleep(intSleepTime);
Application.DoEvents();
}
} while (true);
Application.DoEvents();
// 内容を比較し、変化がある場合は待機
string strBeforeHTML = this.Document.Body.OuterHtml;
do
{
if (strBeforeHTML == this.Document.Body.OuterHtml)
{
break;
}
else
{
strBeforeHTML = this.Document.Body.OuterHtml;
Thread.Sleep(intSleepTime);
Application.DoEvents();
}
} while (true);
});
// ドキュメント読み込み完了時イベント
if (DocumentReady != null)
DocumentReady(sender, e);
}
ディスカッション
コメント一覧
まだ、コメントがありません