excel vba internet explorer自动化 - 访问两个div内的输入

时间:2018-05-14 23:47:26

标签: excel vba mshtml

第一次这样做。

我有以下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>

根据this code,我正在尝试访问input中的vbainputrole但没有idclassjQuery中的结构将是

`$('.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 :(得分:0)

使用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