автоматический вход в систему на 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 ответа:
Событие
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 } } } }