2

我想覆盖EventArgs事件的WebBrowserDocumentCompleted。我无法创建个人事件处理程序,因为我不知道何时应该触发该事件DocumentDownloadCompleted。我想添加到的数据EventArgsOriginalPageLink.

我正在尝试下载一个页面,但我被重定向到一个登录页面(仅一次)。我已经设置了一种登录方式,但是我想重新尝试导航到原始页面,但我不再拥有它了。我可以设置一个全局变量来跟踪每次该链接,但是,有没有办法编辑EventArgs?我是否还需要修改WebBrowserDocumentCompletedEventHandler.

我的代码看起来像

private void Submit_Click(object sender, EventArgs e)
{
    webBrowser1 = new WebBrowser();
    webBrowser1.AllowNavigation = true;           
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
    webBrowser1.Navigate(OriginalPageLink);
}

private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (e.Url.ToString().Contains("login.smlogin.ibb.ubs.net")) {
        loginWithWEBSSO(webBrowser1);
        webBrowser1.Navigate(***e.OriginalPageLink***);
    } else { 
        string mybody = webBrowser1.Document.Body.InnerText;
    }
}

提前感谢您的任何建议。

马可

4

2 回答 2

0

您可以为此使用私有字符串,但我认为您必须重新进行此操作。到目前为止,我看到了这个序列:

1. Navigate to Original page.
2. Presented with login page.
3. Fill in the username / password and then submit.
4. Navigate to Original page.
5. Step 3's process fires a DocumentCompleted event - URL still "login" (loop).
6. Step 4's process fires a DocumentCompleted.

无法保证这些步骤的时间安排,因此第 4 步可能会提示您再次登录。

我通过始终首先访问登录页面并登录来解决此问题。一旦触发 DocumentCompleted,我将转到原始页面。我使用私有变量跟踪所有这些。最简单的是“private int _step=1;” 然后根据您所处的步骤决定在 DocumentCompleted 中做什么。

于 2012-01-16T15:04:57.743 回答
0

您只需要锁定WebBrowser.Navigating事件以使用某种集合来跟踪导航历史记录。在登录发生之前返回上一页。该Navigate事件将触发导航并删除之前的 URL,因此您需要管理集合或仅限制在您的状态下管理哪些项目。

于 2012-01-16T14:51:30.237 回答