VBA нажать на кнопку - PullRequest
       16

VBA нажать на кнопку

2 голосов
/ 10 мая 2019

Проблемы с кнопкой Internet Explorer при использовании VBA.

Мне нужна помощь с нажатием кнопки с помощью vba.Проблема в том, что кнопка не активна, когда я автоматически ввожу имя пользователя и пароль.Это кликабельно, только когда я вручную ввожу имя пользователя и пароль.Мой код работает с другими кнопками на веб-сайте, кроме этой.

'Вот часть моего кода, которая вводит имя пользователя, пароль и должна нажимать на кнопку.

    Set HTMLInput = HTMLDoc.getElementById("USER")
    HTMLInput.Value = "user"

    Set HTMLInput = HTMLDoc.getElementById("Password")
    HTMLInput.Value = "password"

    Set HTMLButton= HTMLDoc.getElementById("subBtn")
    HTMLButton.Click

'Это информация о кнопке

<button type="submit" class="btn btn-primary ng-scope" data-ng-click="saveUserID()" id="subBtn" translate="signin.signin">Sign In</button>

Я где-то читал, что могу использовать Application.sendkeys"username",True для имитации набора текста на клавиатуре, чтобыПосмотрим, будет ли кнопка нажимаемой, но я также не могу заставить ее работать.Есть ли другой способ сделать эту кнопку кликабельной?

Ответы [ 3 ]

1 голос
/ 11 мая 2019

Изменить отключенный атрибут на False

Option Explicit
'VBE > Tools > References: Microsoft Internet Controls
Public Sub Login()
    Dim ie As New InternetExplorer
    With ie
        .Visible = True
        .Navigate2 "https://workforcenow.adp.com/workforcenow/login.html"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document
            .querySelector("#user_id").Value = "something"
            .querySelector("#password").Value = "somethingElse"

            With .querySelector("#subBtn")
                .disabled = False
                .Click
            End With
            Stop '< delete me later
        End With

        While .Busy Or .readyState < 4: DoEvents: Wend
        'other stuff post login
        .Quit
    End With
End Sub
1 голос
/ 10 мая 2019

Попытайтесь заставить веб-сайт думать, что вы печатаете по-настоящему эти значения. Например:

Set HTMLInput = HTMLDoc.getElementById("USER")
HTMLInput.Focus '<-- set the focus on the input (make the element the active one)
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second
HTMLInput.Value = "user"

Set HTMLInput = HTMLDoc.getElementById("Password")
HTMLInput.Focus '<-- set the focus on the input (make the element the active one)
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second
HTMLInput.Value = "password"

Set HTMLButton= HTMLDoc.getElementById("subBtn")
HTMLButton.Click '<-- finally click the button

Примечание. Поскольку вы не указали URL-адрес, этот код не проверен. Но это работало для меня в прошлом на некоторых сайтах, основанных на JavaScript.

0 голосов
/ 11 мая 2019

Вот как я это решил. Не уверен, что это лучший способ решить эту проблему, но он работает. Команда sendkeys фактически заставляет думать, что вы вручную вводите идентификатор и пароль. Мне нужно было добавить время ожидания, потому что оно быстро пропускает пароль и не заканчивает ввод user_id. Спасибо, ребята, что нашли время помочь мне!

    HTMLInput.Focus '<-- set the focus on the input (make the element the active one)
    Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second
    SendKeys "user"
    Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second

    Set HTMLInput = HTMLDoc.getElementById("password")
    HTMLInput.Focus '<-- set the focus on the input (make the element the active one)
    Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second
    SendKeys "password"
    Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1) '<-- wait a second

    Set HTMLbutton = HTMLDoc.getElementById("subBtn")
    HTMLbutton.Click '<-- finally click the button```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...