WebBrowser和DocumentCompleted事件

时间:2012-08-28 20:15:37

标签: c# winforms browser

使用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 statment 只有somtimes才为真。我不确定我还能检查什么以确保浏览器已准备好使用。

我还能检查什么? 或者我应该对这个问题采取不同的方法吗?

我得到了这个,如果在stackOverFlow中来自不同问题的判断,那么我就会发现事件被触发的问题更多的是onces(因为iframe和东西)。

(对不起我的英文)

1 个答案:

答案 0 :(得分:3)

我认为问题是浏览器的网址可能与嵌套IFrame的网址不同,所以当你调用时

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

如果DocumentCompleted事件由IFrame触发,则e.Url中的网址是IFrame中的网址,而wb.Url是网络浏览器中包含网页的网址。< / p>

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

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