使用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和东西)。
(对不起我的英文)
答案 0 :(得分:3)
我认为问题是浏览器的网址可能与嵌套IFrame的网址不同,所以当你调用时
e.Url.AbsolutePath != wb.Url.AbsolutePath
如果DocumentCompleted
事件由IFrame触发,则e.Url
中的网址是IFrame中的网址,而wb.Url
是网络浏览器中包含网页的网址。< / p>
如果您需要检查浏览器是否可以使用,则可能需要等待很长时间。您可以遍历(Frames
)的WB1.Document.Window.Frames
属性以查看加载是否已完成。
您可以使用watin
之类的外部库,它可以很好地检查文档的完成情况。