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语句,因为我发现了一个问题,即事件被触发的次数更多(因为iframe和其他东西)。

(对不起我的英语不好)

4

1 回答 1

3

我认为问题在于浏览器的 url 可能与嵌套 IFrame 的 url 不同,所以当你调用

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

如果DocumentCompleted事件是由 IFrame 触发的,则其中的 urle.Url是 IFrame 之一,wb.Url而是 webbrowser 中包含页面的 url。

如果您需要检查浏览器是否可以使用,您可能需要等待很长时间。您可以循环通过Frames( WB1.Document.Window.Frames) 的属性来查看加载是否完成。

您可以使用外部库,例如watin,它可以很好地检查文档的完成情况。

于 2012-08-28T20:24:54.770 回答