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






Постарайтесь заставить веб-сайт думать, что вы вводите настоящие значения. Например:
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, но, поскольку ваш ответ также работает, я выбрал его как лучший ответ. Спасибо, что нашли время, чтобы помочь мне!
Вот как я это решил. Не уверен, что это лучший способ решить эту проблему, но он работает. Команда 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```
Есть несколько способов сделать это, когда
.Clickне работает. Правильный способ зависит от того, как настроена форма. Например, вы можете запустить событиеonclick, такое как это, или вы можете.submit()саму форму, например это.