Excel VBA Internet Explorer Автоматизация - доступ к вводу внутри двух дел - PullRequest
0 голосов
/ 15 мая 2018

Впервые делаю это.

У меня есть следующий HTML:

<div class="program-filters">
   <span>Search</span>
   <div style="display: inline-block;">
      <input role="combobox" aria-autocomplete="list" autocomplete="off" value="SEARCH VALUE HERE">
   </div>
   <a class="in-map-btn btn btn-primary btn-go btn-mobile-fixed">GO</a>
</div>

И на основе этот код Я пытаюсь получить доступ к input вмой vbainput есть role, но нет id или class.Структура в jQuery будет выглядеть следующим образом:

`$('.program-filter input);`

Мой vba код для доступа к входу:

Do
    '* wait for the input box to be ready
    Set HTMLtags = oHtml.querySelector(".program-filters").getElementsByTagName("div").getElementsByTagName("input")
    DoEvents
Loop While HTMLtags.Length = 0

Но в строке Object does not support this property or method произойдет сбой:

Set HTMLtags = oHtml.querySelector(".program-filters").getElementsByTagName("div").getElementsByTagName("input")

Как получить доступ к input.Спасибо

1 Ответ

0 голосов
/ 15 мая 2018

С querySelector вы можете получить доступ к комбинированному списку следующим образом:

oHtml.querySelector(".program-filters input[role='combobox']")

Следующее не будет работать в VBA:

.getElementsByTagName("div").getElementsByTagName("input")

Вы можете получить коллекцию элементов на основе одногоэлемент, например .getElementsByTagName("div")(0), а не другая коллекция.

Вот рабочий пример кода.С моей стороны я могу использовать Debug.Print inputBox.Value, потому что поле со списком предварительно заполнено:

Option Explicit

Sub get_data()

    Const myURL As String = "http://play.afl/club-finder/?"

    Dim inputBox
    Dim appIE As Object
    Set appIE = CreateObject("internetexplorer.application")

    With appIE
        .Navigate myURL
        .Visible = True
    End With

    Do While appIE.Busy: DoEvents: Loop

    Set inputBox = appIE.document.querySelector(".program-filters input[role='combobox']")
    Debug.Print inputBox.Value        

    appIE.Quit
    Set appIE = Nothing

End Sub
...