Вы хотите получить первое поле ввода по css именам классов "wpfe-logon-input-full wpfe-native-faded-input ng-untouched ng-pristine ng-valid"
. Я написал имена , потому что каждая строка, разделенная пробелом, является собственным css именем класса. Последнее имя класса css не равно ng-valid
при загрузке страницы. Это ng-invalid
. Это причина вашей ошибки.
Решение - использовать только первый css класс wpfe-logon-input-full
. Но этого недостаточно для достижения вашей цели.
После того, как первый код html был загружен и IE сообщает, что браузер больше не занят, IE лжет вам ;-) Есть динамика c контент, который будет загружен после этого. Так что вам придется подождать, пока это не будет сделано.
Но даже в этом случае вход в систему не работает. Вы должны инициировать два события html для каждого поля ввода.
Этот код работает:
Sub Login()
Const url As String = "https://mdemo.cqg.com/cqg/desktop/logon"
Dim ie As Object
Dim HTMLDoc As Object
Dim nodeUsername As Object
Dim nodePassword As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate url
Do While ie.Busy = True: DoEvents: Loop
Application.Wait (Now + TimeSerial(0, 0, 5))
Set HTMLDoc = ie.document
Set nodeUsername = HTMLDoc.getElementsByClassName("wpfe-logon-input-full")(0)
Call TriggerEvent(HTMLDoc, nodeUsername, "compositionstart")
nodeUsername.Value = "TestName"
Call TriggerEvent(HTMLDoc, nodeUsername, "compositionend")
Set nodePassword = HTMLDoc.getElementsByClassName("wpfe-logon-input-full")(1)
Call TriggerEvent(HTMLDoc, nodePassword, "compositionstart")
nodePassword.Value = "TestPassword"
Call TriggerEvent(HTMLDoc, nodePassword, "compositionend")
HTMLDoc.getElementByID("login").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