Пытаясь использовать VBA для поиска на веб-странице и нажмите на кнопку - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь использовать VBA на веб-странице. Я уже разобрался, как войти в систему и ввести свое имя пользователя и пароль. Следующее, что мне нужно, это нажать 3 кнопки. Они появляются только после нажатия на предыдущую кнопку. У меня есть свои операторы if, которые работают, если я прохожу код по частям. Похоже, что он проходит через каждый оператор несколько раз - он проходит через часть if then, затем завершается для, end if, next и снова возвращается к оператору if, не выполняя задачу. он делает это несколько раз, пока я не догадываюсь, что в конце концов это сработает.

Я попробовал практически все. .document.getElementsbyId и все, что с этим связано, не работают. Может быть, есть способ найти документ и заставить его нажать на кнопку? Кажется, это не работает, потому что это не правда, пока в конце концов это так? я действительно не уверен (я новичок в этом)

     'Enters username and password & submits

    With .document.forms("signinginn")
             .User.Value = "username"
             .Password.Value = "password"
        .document.forms(0).submit
    End With

    Application.Wait DateAdd("s", 2, Now)

    With IE.document
                Set a = .getElementsbyTagName("input") 

        For Each a In .getElementsbyTagName("input")

            If a.getAttribute("value") = "Start" Then
            a.Click

             Exit For

        End If


       Next a

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

1 Ответ

1 голос
/ 12 июня 2019

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

Option Explicit

'VBE > Tools > References: Microsoft Internet Controls
Public Sub ClickElement()
    Dim ie As Object, elems As Object, t As Date
    Const MAX_WAIT_SEC As Long = 10

    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate2 "url"

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

        With .document.forms("signinginn")
            .User.Value = "username"
            .Password.Value = "password"
            .document.forms(0).submit
        End With

        While .Busy Or .readyState < 4: DoEvents: Wend
        t = Timer
        Do
            On Error Resume Next
            Set elems = .document.querySelectorAll("input[value=Start]")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While elems Is Nothing
        If Not elems Is Nothing Then
            elems.item(0).Click
        Else
            Exit Sub
        End If
        'Other code
        Stop   '<=Delete me later
        .Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...