автоматический вход в систему на WebBrowser control


Я создаю форму с элементом управления Webbrowser, который автоматически входит на сайт. Когда я отлаживаю его, я вижу, что он запускается на сайт и заполняет имя пользователя и пароль просто отлично, но как только он вошел в систему, он снова проходит через тот же код, следовательно, вызывает ошибку, поскольку он не может найти те же элементы. Почему программа перебирает этот код? Я ввел код не тому обработчику событий?

namespace MyProject
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlDocument doc = webBrowser1.Document;
        HtmlElement username = doc.GetElementById("UserName");
        HtmlElement password = doc.GetElementById("Password");
        HtmlElement submit = doc.GetElementById("submit");
        username.SetAttribute("value", "XXXXXXXX");
        password.SetAttribute("value", "YYYYYYYYYY");
        submit.InvokeMember("click");
    }
}
}
2 4

2 ответа:

Событие DocumentCompleted срабатывает всякий раз, когдаЛюбой документ завершает загрузку.
После входа в систему, событие срабатывает снова при загрузке следующей страницы.

Вы должны проверить URL-адрес и выполнить автоматический вход только в том случае, если вы находитесь на фактической странице входа.

(и убедитесь, что не авто-логин, если Фишер отправляет вашему приложению поддельную страницу входа, чтобы украсть пароль пользователя)

namespace MyProject
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        bool is_sec_page = false;

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (!is_sec_page)
            { 
                HtmlDocument doc = webBrowser1.Document;
                HtmlElement username = doc.GetElementById("UserName");
                HtmlElement password = doc.GetElementById("Password");
                HtmlElement submit = doc.GetElementById("submit");
                username.SetAttribute("value", "XXXXXXXX");
                password.SetAttribute("value", "YYYYYYYYYY");
                submit.InvokeMember("click");
                is_sec_page = true;
            }
            else
            {
                //intract with sec page elements with theire ids and so on
            }
        }
    }
}