0

WebBrowser DocumentCompleted イベントを使用して少し問題が発生しました。私はこのコードを持っています:

int timesToRun = 20;
private void Time_Tick(object sender, EventArgs e)
{
    if (timesToRun >= siteList.SiteLists.Count)
    {
        timesToRun = 0;
        webBrowser1.DocumentCompleted -= this.webBrowser1_DocumentCompleted;
        Console.WriteLine("timer is done");
        timer.Stop();
    }
        timer.Enabled = false;
        Console.WriteLine("timer is now disabled");
        Console.WriteLine(timesToRun);
        string currentSite = siteList.GetSiteFromIndex(timesToRun);
        webBrowser1.Navigate(currentSite);
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    WebBrowser wb = (WebBrowser)sender;
    if (e.Url.AbsolutePath != wb.Url.AbsolutePath) //somtimes dosn't return true
    {
        Console.WriteLine(wb.Url);
        forumAction.FillOutFormIn(wb.Document);
        timesToRun++;
        Console.WriteLine("timer is now enabled");
        timer.Enabled = true;
    }  
}

私の問題は、ifステートメントが真である場合があるということです。ブラウザを使用する準備ができていることを確認するために、さらに何を確認できるかわかりません。

他に何を確認できますか?または、この問題に対して別のアプローチを取る必要がありますか?

ここのstackOverFlowの別の質問からこのifステートメントを取得しました。これは、イベントが1回以上発生したという問題を抱えていたためです(iframeなどのため)。

(私の英語でごめんなさい)

4

1 に答える 1

3

問題は、ブラウザの URL がネストされた IFrame の URL と異なる可能性があることだと思います。

e.Url.AbsolutePath != wb.Url.AbsolutePath

DocumentCompletedイベントが IFrame によってトリガーされた場合、内の URLe.Urlは IFramewb.Urlの URL であり、 は Web ブラウザ内の含まれているページの URL です。

ブラウザを使用する準備ができているかどうかを確認する必要がある場合は、長時間待たなければならない場合があります。Frames( ) のプロパティをループしてWB1.Document.Window.Frames、読み込みが完了したかどうかを確認できます。

のような外部ライブラリを使用できますwatin。これは、ドキュメントの完成を適切にチェックします。

于 2012-08-28T20:24:54.770 に答える