如何进入页面,加载,转到页面,加载等

时间:2012-06-20 17:08:55

标签: c# automation

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

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

谢谢。

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

2 个答案:

答案 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)
{
    // ...
}