简体   繁体   中英

How to login a website using VBA and retrieve data to excel?

There are plenty of examples of how to login into a website, like gmail

But for some reason my code only opens the webpage without logging into the target page, using the provided username and password

I've enabled the HTML object library and Microsoft Internet Controls

Any thoughts , as I am fairly new to this object library?

Plus, how do I grab a table to import into excel from a website after I log in?

I tried macro recording but it needs a password to login into the website

An example would be helpful :) Thanks so much!

Dim HTMLDoc As HTMLDocument
Dim MyBrowser As InternetExplorer


Sub MyGmail()
 Dim MyHTML_Element As IHTMLElement
 Dim MyURL As String
 On Error GoTo Err_Clear
 MyURL = "https://www.google.com/accounts/Login"


 Set MyBrowser = New InternetExplorer
 MyBrowser.Silent = True
 MyBrowser.Navigate MyURL
 MyBrowser.Visible = True

 Do

 Loop Until MyBrowser.ReadyState = READYSTATE_COMPLETE

 Set HTMLDoc = MyBrowser.Document

 HTMLDoc.all.Email.Value = "nasterpizza87@gmail.com" 
 HTMLDoc.all.passwd.Value = "************" 'my password would be here


 For Each MyHTML_Element In HTMLDoc.getElementsByTagName(“input”)

      If MyHTML_Element.Type = “submit” Then _
           MyHTML_Element.Click: Exit For

 Next


 Err_Clear:
 If Err <> 0 Then
 Err.Clear
 Resume Next
 End If

End Sub

If it's specifically Gmail that you're trying to login to then the below code will work. I use it.

  Sub Gmail()

  'Set a reference (Visual Basic Editor) > Tools > References) to the following libraries:
  ' a) Microsoft Internet Controls
  ' b) Microsoft HTML Object Library

  Dim IE As New SHDocVw.InternetExplorer
  Dim HTMLdoc As New MSHTML.HTMLDocument
  Dim HTMLelement As MSHTML.IHTMLElement

  With IE
  .Visible = True
  .Silent = True 'avoid any pop-up
  .navigate "https://www.google.com/accounts/Login"""
  Do While .Busy Or .readyState <> READYSTATE_COMPLETE
  DoEvents
  Loop
  End With

  Call myTimer

  Set HTMLdoc = IE.document

  HTMLdoc.all.identifier.Value = "YourUsernameHere"
  HTMLdoc.all.identifierNext.Click

  With IE
  Do While .Busy Or .readyState <> READYSTATE_COMPLETE
  DoEvents
  Loop
  End With

  Call myTimer

  For Each HTMLelement In HTMLdoc.getElementsByName("password")
  If HTMLelement.getAttribute("type") = "password" Then
  HTMLelement.Value = "YourPasswordHere"
  Exit For
  End If
  Next HTMLelement

  HTMLdoc.all.passwordNext.Click

  Set IE = Nothing
  Set HTMLdoc = Nothing
  Set HTMLelement = Nothing

  End Sub

  Private Sub myTimer()

  Dim timerStart As Single

  Const pauseTIME As Integer = 1 'second

  timerStart = Timer
  Do Until Timer - timerStart > pauseTIME
  DoEvents
  Loop

  End Sub
Sub LoginToSite()

Const cURL = "https://singlepoint.usbank.com/cs70_banking/logon/sbuser"
Const ccompanyID = "YourCustomerIDHere"
Const cj_username = "YourUserIDHere"
Const cj_password = "YourPasswordHere"

Dim IE As InternetExplorer
Dim doc As HTMLDocument
Dim LoginForm As HTMLFormElement
Dim CustomerIDInputBox As HTMLInputElement
Dim UserIDInputBox As HTMLInputElement
Dim PasswordInputBox As HTMLInputElement
Dim objElement As Object
Dim objCollection As Object

Set IE = New InternetExplorer

IE.Visible = True
IE.navigate cURL

'Wait for initial page to load

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Set doc = IE.document

'Get the only form on the page

Set LoginForm = doc.forms(0)

'Get the CustomerID textbox and populate it
'input name="companyID" id="companyID" size="18" value="" type="text"

Set CustomerIDInputBox = doc.getElementById("companyID")
UsernameInputBox.Value = ccompanyID

'Get the UserID textbox and populate it
'input name="j_username" id="j_username" size="18" type="text"

Set UserIDInputBox = doc.getElementById("j_username")
UsernameInputBox.Value = cj_username

'Get the Password textbox and populate it
'input name="j_password" id="j_password" size="18" type="password"


Set PasswordInputBox = doc.getElementById("j_password")
PasswordInputBox.Value = cj_password

'Get the form input button and click it
'input name="submit_logon" size="18" type="image"

Set ElementCol = IE.document.getElementsByName("submit_logon")
ElementCol.Item(0).Click

'Wait for the new page to load

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM