我希望能够自动执行此操作,以便我可以转到一个页面,加载,执行代码,下一页,加载,执行代码。现在我正在使用计时器,但这似乎不像等待页面加载那么高效。这是我认为可行的,但它只是到最后一个站点然后加载。
我的做法可能是错的,所以我希望也许有人可以指出我正确的方向。
谢谢。
private void button1_Click(object sender, EventArgs e)
{
string url1 = "http://google.com";
string url2 = "http://yahoo.com";
string url3 = "http://msn.com";
webBrowser1.Navigate(url1);
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
webBrowser1.Navigate(url2);
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
webBrowser1.Navigate(url3);
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}
答案 0 :(得分:3)
每个页面加载事件不需要不同的事件处理程序。 只需创建一个堆栈/队列来存储您要加载的页面:
Queue<string> pagesToLoad = new Queue<string>();
private void Button1_Click(object sender, EventArgs e)
{
pagesToLoad.Enqueue("http://www.test.com");
pagesToLoad.Enqueue("http://www.test2.com");
pagesToLoad.Enqueue("http://www.test3.com");
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
webBrowser1.Navigate("http://www.first.com");
}
然后编写事件处理程序方法。当您的浏览器完成加载页面时,它将调用此方法。您可以在其中运行代码,当您准备好后,您可以导航到下一页。
webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// TODO: do whatever you want with the page you just loaded
// You can get the page URL with e.Url
// Get the next Url from the queue and navigate:
if (pagesToLoad.Count == 0)
{
return; // Finished!
}
else
{
string nextUrl = pagesToLoad.Dequeue();
webBrowser1.Navigate(nextUrl);
}
}
就是这样。
答案 1 :(得分:2)
如果您需要在开始下一页之前等待第一页完成,您应该按顺序链接导航,直到DocumentCompleted
事件触发前一个URL:
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.DocumentCompleted += OnGoogleCompleted;
webBrowser1.Navigate("http://google.com");
}
private void OnGoogleCompleted(object sender, EventArgs e)
{
webBrowser1.DocumentCompleted -= OnGoogleCompleted;
webBrowser1.DocumentCompleted += OnYahooCompleted;
webBrowser1.Navigate("http://yahoo.com");
}
private void OnYahooCompleted(object sender, EventArgs e)
{
webBrowser1.DocumentCompleted -= OnYahooCompleted;
webBrowser1.DocumentCompleted += OnMsnCompleted;
webBrowser1.Navigate("http://msn.com");
}
private void OnMsnCompleted(object sender, EventArgs e)
{
// ...
}