2014-02-14 27 views
2

我是C#的新手,所以我在其他問題中尋找此主題,但他們不適合我。我想要做的是我目前嘗試使用c#程序(我試圖實現)登錄到我學校的服務器。我想要做的是我知道頁面的代碼,所以我使用C#的Web瀏覽器導航,然後我只想寫入名稱和密碼到輸入框,這就是我卡住的地方。你能給我任何建議嗎?試圖通過C#程序登錄到網站

如果你想看看頁:https://suis.sabanciuniv.edu/prod/twbkwbis.P_SabanciLogin

感謝您的建議。

在這裏,我是如何使用的代碼(編輯:添加事件處理程序,但這是我第一次使用,因此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,只需添加完成那裏的事件處理程序... – Ave

+0

現在,我試圖添加事件處理程序,但我得到一個錯誤信息時我用它錯了? – Kaan

+0

祝你好運,很高興聽到sabanci大學將獲得一個應用程序:) – Ave

回答

1

您需要首先查找用戶名和密碼字段的輸入框作爲ID或節點。然後將它們分配爲這樣:

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 ID的時候,我用螢火蟲看了一下頁面,它告訴我用戶名框的ID是UserID,而密碼是PIN,我是否做錯了? – Kaan

+0

我想看的第一個地方是確保將html頁面加載到doc變量中。如果HtmlDocument沒有被添加到這個變量中,那麼找不到UserID框(雖然我認爲這個異常會被拋出第一行) –

+0

您是否使用WebBrowser控件?如果是的話,你是否自動執行該過程以導航到此登錄頁面?如果是這樣,那麼你必須確保在頁面完全下載和處理之後才能運行登錄腳本。 WebBrowser控件有一個.DocumentCompleted事件,您可以編寫一個事件以確保沒有任何事情發生與頁面加載不同步。 –