0

我希望能够自动执行此操作,这样我就可以转到一页,加载,执行代码,下一页,加载,执行代码。现在我正在使用计时器,但这似乎不如等待页面加载有效。这是我认为可行的方法,但它只是转到最后一个站点然后加载。

我的方法可能是错误的,所以我希望也许有人能指出我正确的方向。

谢谢你。

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);
}
4

2 回答 2

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);
    }
}    

就是这样。

于 2012-06-20T17:26:24.410 回答
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)
{
    // ...
}
于 2012-06-20T17:16:40.997 回答