VBA, чтобы нажать на кнопку

Проблемы с кнопкой 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 для имитации набора текста на клавиатуре, чтобы увидеть, будет ли кнопка нажиматься, но я также не могу заставить это работать. Есть ли другой способ сделать эту кнопку кликабельной?

Есть несколько способов сделать это, когда .Click не работает. Правильный способ зависит от того, как настроена форма. Например, вы можете запустить событие onclick, такое как это, или вы можете .submit() саму форму, например это.

ashleedawg 10.05.2019 20:26

Можете ли вы поделиться URL?

QHarr 10.05.2019 21:56
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
2
616
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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.

Ответ принят как подходящий

Измените атрибут disabled на 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

На самом деле я нашел, как это сделать, используя часть ответа Matteo NNZ, но, поскольку ваш ответ также работает, я выбрал его как лучший ответ. Спасибо, что нашли время, чтобы помочь мне!

Chum Ba 11.05.2019 04:48

Вот как я это решил. Не уверен, что это лучший способ решить эту проблему, но он работает. Команда 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```

Другие вопросы по теме