2010-03-27 56 views
1

我使用Web瀏覽器登錄到Facebook上。一切正常,但問題是,當我調用按鈕點擊我需要檢查密碼是否正確,但檢查似乎發生在按鈕被調用之前,這是沒有意義的,因爲檢查代碼是在調用之後。C#WebBrowser控件調用問題

private void Facebook_Login(String username, String password) 
    { 
     webBrowser1.Url = new Uri("http://m.facebook.com"); 

     while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents(); 

     HtmlElementCollection inputs = webBrowser1.Document.GetElementsByTagName("input"); 
     foreach(HtmlElement input in inputs) 
     { 
      if (input.GetAttribute("name") == "email") 
      { 
       input.SetAttribute("value", "[email protected]"); 
      } 
      if (input.GetAttribute("name") == "pass") 
      { 
       input.SetAttribute("value", "kelaroostj"); // dont worry that pass wont work lol. 
      } 
      if (input.GetAttribute("name") == "login") 
      { 
       input.InvokeMember("click"); 
      } 
     } 

     while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents(); 

     HtmlElementCollection bs = webBrowser1.Document.GetElementsByTagName("b"); 
     foreach(HtmlElement b in bs) 
     { 
      MessageBox.Show(b.InnerHtml); 
     } 

     Log_Message("Logged into Facebook with: [email protected]"); 
    } 

回答

1

這是因爲您正在循環所有HTML元素。您只需按照「邏輯」順序編寫此代碼,並不意味着HTMLElementCollection也具有此代碼。

如果HTML按鈕行中的第一個元素,那會發生的第一件事是,按鈕被點擊。

HtmlElement Username = Browsers[0].Document.GetElementById("name"); 
HtmlElement Password = Browsers[0].Document.GetElementById("pass"); 
HtmlElement LoginBtn = Browsers[0].Document.GetElementById("login"); 

Username.SetAttribute("value", "[email protected]"); 
Password.SetAttribute("value", "kelaroostj"); 
LoginBtn.InvokeMember("click"); 

這是假定元素的ID如上所供。