2013-03-23 138 views
0

好吧,我有一個登錄到live.com腳本,通過這樣的:顯示錯誤消息時錯誤輸入的密碼

 WebBrowser1.Document.GetElementById("login").SetAttribute("value", txtUsername.Text) 
    WebBrowser1.Document.GetElementById("passwd").SetAttribute("value", txtPassword.Text) 
    WebBrowser1.Document.GetElementById("SI").InvokeMember("Click") 

這是非常基本的,但現在我需要的是找出如果用戶鍵入正確的或錯誤的帳戶憑證。因此,這將需要一條錯誤消息,說「無法登錄」,但如果成功,我只會將網頁瀏覽器重定向到一個新頁面。現在我不熟悉VB上的IF語句,但我知道有兩種方法可以完成,但不知道如何去做。所以第一種方法是在點擊提交按鈕後閱讀它所到達的URL,這將非常好,並且可以工作(所以當某人鍵入不正確的帳戶憑證時,它會將它發送到錯誤頁面,但是當您鍵入正確的帳戶它會將您發送到正確的頁面)。但我想要做的主要方式是閱讀內容。如果頁面在提交後讀取「That Microsoft account doesn't exist. Enter a different email address or get」,則消息框「Wrong Account Credentials」,反之亦然。我對此並不滿意,因爲我從來沒有真正與WebBrowser合作過,但如果任何人都能以正確的方式引導我,我會非常感激。

回答

0

如果你想通過什麼在網頁瀏覽器返回來評價,你可以搜索加載作爲輸入密碼的結果文檔的innerHTML:

With WebBrowser1 

     Do Until Not (.IsBusy) 
      Application.DoEvents() 
     Loop 

     Do Until .ReadyState = WebBrowserReadyState.Complete 
      Application.DoEvents() 
     Loop 


    End With 

    Dim htmlText As String 

    If Not (WebBrowser1.Document.Body.InnerHtml) Is Nothing Then 

     htmlText = WebBrowser1.Document.Body.InnerHtml 

     If InStr(htmlText, "That Microsoft account doesn't exist.") Then 

      Messagebox.Show("Wrong Account Credentials") 
      'code to go here if it is true 

     Else 

      Messagebox.Show("Correct Account Credentials") 
      'code to go here if it is false 


     End If 

    End If 

注:如果innerHTML的不工作你也可以嘗試使用outerhtml。

由於您只想驗證一次,請嘗試刪除.DocumentChanged事件處理程序,因爲除了初始登錄以外,這是因爲其他原因而觸發的;將其替換爲您在登錄時調用「Click」事件後調用的子例程。

Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click 
    WebBrowser1.Document.GetElementById("login").SetAttribute("value", txtUsername.Text) 
    WebBrowser1.Document.GetElementById("passwd").SetAttribute("value", txtPassword.Text) 
    WebBrowser1.Document.GetElementById("SI").InvokeMember("Click") 

    verifyLogin() 

End Sub 


Private Sub verifyLogin() 


    With WebBrowser1 

     Do Until Not (.IsBusy) 
      Application.DoEvents() 
     Loop 

     Do Until .ReadyState = WebBrowserReadyState.Complete 
      Application.DoEvents() 
     Loop 


    End With 

    Dim htmlText As String 

    If Not (WebBrowser1.Document.Body.InnerHtml) Is Nothing Then 

     htmlText = WebBrowser1.Document.Body.InnerHtml 

     If InStr(htmlText, "Microsoft account") Then 

      MessageBox.Show("You have entered in a wrong password or the account doesn't exist.") 

      'code to go here if it is true 
     Else 

      MessageBox.Show("Sign in successful. Proceed on...") 

      'code to go here if it is false 


     End If 

    End If 

End Sub 
+0

哇約翰!這對我的方式非常有用。然而,我唯一感到沮喪的是,每當程序加載它往往說「錯誤的帳戶憑據!」每次程序打開(所以我必須單擊確定)然後我可以測試程序,它完美地工作(告訴我,如果我使用了錯誤的憑據或權利)。每當頁面加載時,它也會提示我3次,所以我也很困惑。任何想法,爲什麼這是? http://pastebin.com/K8Mrq8FR – 2013-03-26 07:06:03

+0

在做出決定後,嘗試添加'htmlText = Nothing'(例如,清除變量的內容)。你可以發佈更多的代碼審查? – 2013-03-28 18:26:39

+0

嗯...試過了,它沒有工作。這裏是完整的代碼:http://pastebin.com/MmiTJ99j我不知道它有什麼需要處理的,這很容易混淆爲什麼它會提示我輸入錯誤的憑證3次,但是當我輸入正確的代碼,它只會給我發一次消息。 – 2013-03-28 22:06:46