Как смоделировать «Фокус» и «Набрав» события - PullRequest
0 голосов
/ 19 февраля 2019

Попытка смоделировать событие ввода и ввода, но это не сработает

Sub Login(MyLogin, MyPass)
    Dim IEapp As InternetExplorer
    Dim IeDoc As Object
    Dim ieTable As Object
    TaskKill "iexplore.exe"

    Set IEapp = New InternetExplorer
        IEapp.Visible = True
            IEapp.Navigate "https://example.com/portal/en/login"
        Do While IEapp.Busy: DoEvents: Loop: Do Until IEapp.readyState = READYSTATE_COMPLETE: DoEvents: Loop
        Set IeDoc = IEapp.Document
        With IeDoc.forms(2)


            .Name.Value = MyLogin
            .Name.Focus
            .FireEvent ("onkeypress")
            .FireEvent ("onchange")


            .Password.Value = MyPass
            .Password.Focus
            .FireEvent ("onkeypress")
            .FireEvent ("onchange")
       End With
        IeDoc.getElementsByClassName("form__button form__button--login-site")(1).Click

End Sub

Как вызвать событие фокусировки и ввода?Sendkeys - плохое решение, так как в нем есть ошибка Excel с Numlock

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

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

Internet Explorer:

Option Explicit
Public Sub LogIn()
    Dim ie As New InternetExplorer
    With ie
        .Visible = True
        .Navigate2 "https://www.darsgo.si/portal/en/login"

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

        .document.querySelector(".LoginHeader + p a").Click

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

        Dim event_onInput As Object
        Set event_onInput = .document.createEvent("HTMLEvents")
        event_onInput.initEvent "input", True, False

        With .document.querySelector("#name")
            .Value = "bobBuilder@banana.com"
            .dispatchEvent event_onInput
        End With
        With .document.querySelector("#password")
            .Value = "something"
            .dispatchEvent event_onInput
        End With

        .document.querySelector(".form__button").Click

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

        Stop
        .Quit
    End With     
End Sub

Селен:

Есливы готовы использовать селен базовый , он прекрасно работает следующим образом.После установки Селена зайдите в VBE> Инструменты> Ссылки и добавьте ссылку на библиотеку типов селена.Вы должны использовать последнюю версию ChromeDriver.ChromeDriver может быть установлен уже в папке селена - в противном случае его необходимо добавить туда.

Option Explicit

Public Sub Login()
    Dim d As WebDriver
    Set d = New ChromeDriver
    Const URL = "https://www.darsgo.si/portal/en/login"
    With d
        .Start "Chrome"
        .get URL
        .FindElementByCss(".choose-language-popup__list li:nth-of-type(2) a").Click
        .FindElementByCss(".choose-language-popup__icon-continue").Click
        .FindElementByCss("p.registerHeader a").Click
        .FindElementById("name").SendKeys "bob@builder.com"
        .FindElementById("password").SendKeys "verySecret"
        .FindElementByCss(".form__button").Click

        Stop

        .Quit
    End With
End Sub
0 голосов
/ 19 февраля 2019

Я думаю, что это будет работать для вас:

Sub Login()
    Dim IEapp As InternetExplorer
    Dim IeDoc as Object
    Dim ieTable As Object

    TaskKill "iexplore.exe"
    Set IEapp = New InternetExplorer
        IEapp.Visible = True
            IEapp.navigate "https://example.com/portal/en/login"
        Do While IEapp.Busy: DoEvents: Loop: Do Until IEapp.readyState = READYSTATE_COMPLETE: DoEvents: Loop
        Set IeDoc = IEapp.document
        With IeDoc.forms(2)
            .elements("name").Value = MyLogin
            .elements("password").Value = MyPass
       End With
       IeDoc.forms(2).submit
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...