2015-04-30 157 views
0

我試圖將用VBA編寫的腳本遷移到我已經在VB.NET中編寫的應用程序中,作爲附加功能。通過使用VB.NET填充HTML元素自動登錄頁面

我知道VBA和VB.NET語言差異很大,我一直在努力遷移我需要的代碼段。

我需要打開一個Internet Explorer頁面,填寫兩個用於用戶名和密碼的文本框,然後自動按下提交/登錄按鈕。

在VBA中,我能夠使用下面的代碼來完成此操作。

Dim HTMLDoc As HTMLDocument 
Dim MyBrowser As InternetExplorer 

Dim MyHTML_Element As IHTMLElement 
Dim MyURL As String 

    'Ignore errors 
    On Error GoTo Err_Clear 

    MyURL = Address 

    Set MyBrowser = New InternetExplorer 'Open Internet Explorer 
    MyBrowser.Silent = True 'Silence popups & Errors 
    MyBrowser.Navigate MyURL 'Browse 
    MyBrowser.Visible = True 'Obvious 

    Do 
    'Wait till finished 
    Loop Until MyBrowser.ReadyState = READYSTATE_COMPLETE 
    Set HTMLDoc = MyBrowser.Document 

    'Enter user/password 
    For Each MyHTML_Element In HTMLDoc.getElementsByTagName("input") 
     If MyHTML_Element.Name = ("username") Then 
      MyHTML_Element.Value = Username 'Variable to be passed to sub  

     ElseIf MyHTML_Element.Name = ("password") Then 
      MyHTML_Element.Value = Password 'Variable to be passed to sub 

     ElseIf MyHTML_Element.Type = "submit" Then 
      MyHTML_Element.Click: Exit For 

     End If 

    Next 

Err_Clear: 
     If Err <> 0 Then 
     'Debug.Assert Err = 0 
     Err.Clear 
     Resume Next 

     End If 

當這個移動到VB.NET,甚至加入我會使用Microsoft Internet控制的參考文獻後,和Microsoft HTML對象庫,我收到幾個錯誤,例如:

Dim MyHTML_Element As IHTMLElement '"ITHMLElement" is ambiguous in the namespace 'mshtml' 

Loop Until MyBrowser.Readystate = READYSTATE_COMPLETE 'Not declared 

我以前使用過Visual Basic,但沒有用它來操作Web瀏覽器中的HTML頁面的值,並且在VB.NET在線上一直沒能找到關於這個的更多信息。

我希望有人可以提供一些對我的洞察,或指向我在正確的方向,在此先感謝!

回答

0

我今天在另一個網站上找到了答案。

我可以使用下面的vb.net代碼來識別每個元素,填補它的用戶名和密碼值,然後單擊提交按鈕(假設提交按鈕的元素ID是已知的)

Dim theElementCollection As HtmlElementCollection = Me.WebBrowser1.Document.GetElementsByTagName("input") 

     For Each curElement As HtmlElement In theElementCollection 

      Dim controlName As String = curElement.GetAttribute("name").ToString.ToUpper 

      If controlName.ToUpper = "USERNAME" Then 

       curElement.SetAttribute("Value", Username) 

      ElseIf controlName.ToUpper = "PASSWORD" Then 

       curElement.SetAttribute("Value", Password) 

WebBrowser1.Document.GetElementById("submitButton").InvokeMember("click") 'click button