C # - переопределить события в WebBrowserDocumentCompletedEventHandler - PullRequest
2 голосов
/ 16 января 2012

Я бы хотел переопределить EventArgs события WebBrowserDocumentCompleted. Я не могу создать личный обработчик событий, потому что понятия не имею, когда мне следует запускать событие DocumentDownloadCompleted. Данные, которые я хотел бы добавить к EventArgs, это OriginalPageLink.

Я пытаюсь загрузить страницу, но я перенаправлен на страницу входа (только один раз). Я настроил способ входа в систему, но затем я хотел бы повторить попытку перехода на исходную страницу, но у меня его больше нет. Я мог бы установить глобальную переменную для отслеживания каждой ссылки, но есть ли способ отредактировать 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;
    }
}

Заранее благодарю за любые предложения.

Marco

Ответы [ 2 ]

0 голосов
/ 16 января 2012

Вы можете использовать личную строку для этого, но я думаю, что вы должны переработать это.Пока что я вижу эту последовательность:

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, в зависимости от того, на каком этапе вы были.

0 голосов
/ 16 января 2012

Вам просто нужно зафиксировать событие WebBrowser.Navigating, чтобы отслеживать историю навигации, используя какую-то коллекцию. Вернитесь на предыдущую страницу до входа в систему. Событие Navigate вызовет навигацию и удалит предыдущий URL, поэтому вам нужно управлять коллекцией или просто ограничивать, какие элементы управляются в вашем штате.

...