2014-02-14 5 views
2

Я новичок в C#, поэтому я искал эту тему в других вопросах, но они были не для меня. То, что я пытаюсь сделать, я пытаюсь войти на серверы моей школы, используя программу C# (которую я пытаюсь реализовать). То, что я пытаюсь сделать, это знать код страницы, поэтому я использую веб-браузер C# для навигации, тогда я просто хочу писать имя и пароль в поля ввода, и именно здесь я застрял. Не могли бы вы дать мне какие-нибудь советы?Попытка войти на сайт через программу C#

Если вы хотите посмотреть на странице: https://suis.sabanciuniv.edu/prod/twbkwbis.P_SabanciLogin

Спасибо за ваши советы.

Вот как я использовал код (Edit: Добавлено EventHandler, но это мой первый раз, используя так promts меня «ссылка на объект не установлено на экземпляр объекта»):

  private void buttonGo_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      string input = "https://suis.sabanciuniv.edu/prod/twbkwbis.P_SabanciLogin"; 


      webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted); 

      webBrowser1.Navigate(input); 
      HtmlDocument doc = webBrowser1.Document; 
      HtmlElement userName = doc.GetElementById("UserID"); 
      HtmlElement pass = doc.GetElementById("PIN"); 
      HtmlElement submit = doc.GetElementById("Login"); 

      userName.SetAttribute("value", textID.Text); 
      pass.SetAttribute("value", textPASS.Text); 

      submit.InvokeMember("Click"); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
    public void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     var webBrowser = sender as WebBrowser; 
     webBrowser.DocumentCompleted -= WebBrowser_DocumentCompleted; 
     MessageBox.Show(webBrowser.Url.ToString()); 
    } 
} 

}

Наконец-то я решил проблему, которую немного обманул, но сумел решить. Вот рабочий код:

private void buttonGo_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       string input = "https://suis.sabanciuniv.edu/prod/twbkwbis.P_SabanciLogin"; 


       webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted); 

       webBrowser1.Navigate(input); 

       HtmlDocument doc = webBrowser1.Document; 
       //HtmlElement userName = doc.GetElementById("UserID"); These not worked because ID of the elements were hidden so they are here to show which of these did not work. 
       //HtmlElement pass = doc.GetElementById("password"); 
       HtmlElement submit = webBrowser1.Document.Forms[0].Document.All["PIN"].Parent.Parent.Parent.NextSibling.FirstChild; 

       //userName.SetAttribute("value", textID.Text); 
       //pass.SetAttribute("value", textPASS.Text); 




       webBrowser1.Document.Forms[0].All["UserID"].SetAttribute("value", textID.Text); 
       webBrowser1.Document.Forms[0].All["PIN"].FirstChild.SetAttribute("value", textPASS.Text); 
       submit.InvokeMember("Click"); 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
     public void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      var webBrowser = sender as WebBrowser; 
      webBrowser.DocumentCompleted -= WebBrowser_DocumentCompleted; 
      MessageBox.Show(webBrowser.Url.ToString()); 
     } 
+0

Привет, мой турецкий друг, если вы используете XAML, просто добавить EventHandler завершенных там ... – Ave

+0

Теперь, я пытался добавить обработчик событий, но я получаю сообщение об ошибке утра Я использую это неправильно? – Kaan

+0

Удачи вам! Приятно слышать, что университет sabanci собирается получить приложение :) – Ave

ответ

1

Необходимо сначала ввести поля ввода имени пользователя и пароля в качестве идентификаторов или узлов. Затем назначьте их как таковые:

HtmlDocument doc = webBrowser1.Document; 
HtmlElement email = doc.GetElementById("email"); 
HtmlElement pass = doc.GetElementById("pass"); 
HtmlElement submit = doc.GetElementById("LoginButton"); 

email.SetAttribute("value", "InsertYourEmailHere"); 
//Same for password 

submit.InvokeMember("Click"); 
+0

Когда я пытаюсь это сделать, он выдает исключение во второй строке, что объект не может что-то сделать. Я использую идентификаторы wron, я смотрю на страницу с firebug, и он показал мне, что идентификатор поля имени пользователя - UserID, а для пароля - PIN-код. Я делаю это неправильно? – Kaan

+0

Первые места, на которые я бы посмотрел, будут следить за тем, чтобы страница html загружалась в переменную doc. Если HtmlDocument не добавляется к этой переменной, то ящик UserID не может быть найден (хотя я думаю, что исключение будет выбрано в первой строке) –

+0

Используете ли вы элемент управления WebBrowser? и если это так, вы автоматизируете процесс перехода к этой странице входа? Если это так, вам нужно будет убедиться, что вы не запускаете сценарии входа в систему, пока ПОСЛЕ того, как страница не будет полностью загружена и обработана. Элементы управления WebBrowser имеют событие .DocumentCompleted, в котором вы можете написать событие, чтобы убедиться, что ничего не происходит из-за синхронизации с загрузкой страницы. –

Смежные вопросы