首页 > 解决方案 > Excel VBA抓取网页数据,将输入输入AJAX自动完成不会触发列表

问题描述

第一次尝试这个。

HTML我在网页中有以下内容,我正在使用ExcelVBA根据excel文件中的用户地址抓取数据。我遇到的问题是combobox不接受任何输入,但它必须是从下拉列表中选择的。

我可以选择输入字段并添加我的条目,但下拉列表没有出现。一旦检测到输入,该站点就会使用调用autocomplete来构建列表的位置。AJAX

如何触发组合框中的下拉列表并从中选择正确的条目以匹配我范围内的输入(如果存在)?下面的代码是我的各种尝试之一。

网址是http://play.afl/club-finder/?,我试图在GO按钮旁边的最后一个字段中输入郊区名称。试一下,例如,Parramatta

一个观察是对于combobox元素:

<input role="combobox" aria-autocomplete="list" value="Parramatta, NSW" autocomplete="off">

如果我在字段中手动输入值,inspect 会在value=我输入时显示更改。当vba更改此值时,它不会在检查中更改。

谢谢

<div class="program-filters">
   <span>Search for&nbsp;</span>
   <a>
      any gender&nbsp;<img src="/site/images/svg/DownArrow.svg" alt="Down Arrow" class="down-arrow-icon">
   </a>
   <span class="xs-hide">,</span>
   <br class="sm-hide md-hide lg-hide">
   <a>
      all ages&nbsp;<img src="/site/image/svg/DownArrow.svg" alt="Down Arrow" class="down-arrow-icon">
   </a>
   to
   <a>
      play&nbsp;<img src="/site/images/svg/DownArrow.svg" alt="Down Arrow" class="down-arrow-icon">
   </a>
   <br class="sm-hide md-hide lg-hide">&nbsp;near&nbsp;
   <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>

到目前为止,我的宏是:

Sub get_data()

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

Dim c As Range

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

With appIE
    .Navigate myURL
    .Visible = True
End With

Do While appIE.Busy
    DoEvents
Loop

For Each c In Range("MY_SEARCH")

    Set searchBar = appIE.document.getElementsByClassName("program-filters")(0)

    Set myInput = searchBar.getElementsByTagName("INPUT")(0)

    myInput.Focus
    myInput.Value = c.Value
    myInput.FireEvent ("onchange")

    Set myAutoComplete = searchBar.getElementsByClassName("autocomplete")(0)

    If Not myAutoComplete Is Nothing Then

       'FIND IN LIST AND SELECT HERE

        searchBar.getElementsByClassName("in-map-btn btn btn-primary btn-go btn-mobile-fixed")(0).Click

        Do While appIE.Busy
            DoEvents
        Loop

        'COLLECT DATA HERE

    End If

Next

appIE.Quit
Set appIE = Nothing

End Sub

尝试执行jQueryfromvba以触发AJAX,没有错误但不起作用:

appIE.Document.parentWindow.execScript "jQuery('.program-filters input').trigger('change')"

尽管没有错误,但使用以下建议仍然无法正常工作:

jq = "jQuery('.program-filters input').val('" & c.Value & "').trigger('change')"
appIE.Document.parentWindow.execScript jq

标签: vbaexcel

解决方案


您可能都必须在输入字段(组合框)中填写一个值并触发更改事件才能使其工作。尝试这个:

appIE.Document.parentWindow.execScript "jQuery('.program-filters input').val('yourvalue').trigger('change')"

推荐阅读