Событие Excel VBA .click не работает с тегом <a> - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь автоматизировать вход на сайт, чтобы получить баланс в моем аккаунте.

Событие .click на кнопке входа не работает. Я чувствую, что упускаю что-то простое.

    Sub test()

    Set IE = CreateObject("InternetExplorer.Application")
    my_url = "https://www.synchronycredit.com/eSecurity/Login/login.action?clientId=google&accountType=plcc&langId=en"

    With IE
        .Visible = True
        .navigate my_url
        .Top = 50
        .Left = 530
        .Height = 400
        .Width = 400

    Do Until Not IE.Busy And IE.readyState = 4
        DoEvents
    Loop

    End With


    IE.document.getElementById("loginUserID").Value = "userNameHere"
    IE.document.getElementById("loginPassword").Value = "passWordHere"


    IE.document.getElementByID("secLoginBtn").Click

    Do Until Not IE.Busy And IE.readyState = 4
        DoEvents
    Loop
End Sub

Вот код с сайта:

<a tabindex="0" title="Login to your account" id="secLoginBtn" role="button" style="cursor: pointer;" data-reason="login:start:submit" onclick="javascript:setRememberMeFlag('rememUID');" data-type="button" class="ADAbtn btn secLoginBtn secureLockImg ensightenmEvent">

                                        <img class="pull-left" src="/essimages/cs/groups/ess_webasset/generic/@common/en/brandimages/044828.png" alt="">
                                    Secure Login</a>

1 Ответ

0 голосов
/ 24 апреля 2020

Прежде всего:
Всегда используйте Option Explicit в качестве первой строки в каждом модуле VBA.

Чтобы решить вашу проблему, сначала нужно вызвать события нажатия клавиш для полей ввода. После ввода значений вы можете нажать кнопку отправки.

Первая строка:

Option Explicit

Основной макрос:

Sub test()

Dim browser As Object
Dim url As String
Dim nodeUserName As Object
Dim nodePassWord As Object
Dim nodeSubmitButton As Object
Dim domDoc As Object
Dim userName As String
Dim passWord As String

  userName = "Your Name"
  passWord = "YourPassword"

  Set browser = CreateObject("InternetExplorer.Application")
  url = "https://www.synchronycredit.com/eSecurity/Login/login.action?clientId=google&accountType=plcc&langId=en"

  'Initialize Internet Explorer, set visibility,
  'call URL and wait until page is fully loaded
  Set browser = CreateObject("internetexplorer.application")
  browser.Visible = True
  browser.navigate url
  browser.Top = 50
  browser.Left = 530
  browser.Height = 400
  browser.Width = 400
  Do Until browser.readyState = 4: DoEvents: Loop
  Set domDoc = browser.document

  Set nodeUserName = domDoc.getElementByID("loginUserID")
  Call TriggerEvent(domDoc, nodeUserName, "onKeypress")
  nodeUserName.Value = userName

  Set nodePassWord = domDoc.getElementByID("loginPassword")
  Call TriggerEvent(domDoc, nodePassWord, "onKeypress")
  nodePassWord.Value = passWord

  Set nodeSubmitButton = domDoc.getElementByID("secLoginBtn")
  nodeSubmitButton.Click

End Sub

Подпрограмма для запуска события html:

Private Sub TriggerEvent(htmlDocument As Object, htmlElementWithEvent As Object, eventType As String)

  Dim theEvent As Object

  htmlElementWithEvent.Focus
  Set theEvent = htmlDocument.createEvent("HTMLEvents")
  theEvent.initEvent eventType, True, False
  htmlElementWithEvent.dispatchEvent theEvent
End Sub
...