2013-10-15 3 views
4

Я создаю форму с элементом управления 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"); 
    } 
} 
} 
+0

'вызывает error' и ошибка ....? – tnw

ответ

3

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

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

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

+0

Я попытался установить оператор if, чтобы проверить URL-адрес, но, видимо, я не могу использовать webBrowser1.Url = "http://someurl.com". Не могли бы вы показать мне, как проверить URL? Извините за то, что вы такой noob. –

+0

@ LatexPerson: Почему бы и нет? Какую ошибку вы получили? – SLaks

+0

Я использую webbrowser в asp.net. Автоматический вход работает отлично при тестировании локальных, но если сбой на сервере. Я использовал Response.Write(), и я вижу, что имя пользователя и пароль установлены правильно, и явно нажата кнопка входа в систему при повторном загрузке страницы (если URL-адрес - это URL-адрес входа в систему на странице по умолчанию, повторение означает неудачный вход в эту страницу по умолчанию снова перенаправляется на страницу входа в систему). что может быть проблемой? –

2
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 
      } 
     } 
    } 
} 
Смежные вопросы