【问题标题】:How to select <li> with ie vba web-scrape script如何使用 ie vba web-scrape 脚本选择 <li>
【发布时间】:2014-10-10 16:46:58
【问题描述】:

我编写了一个用 VBA 编写的自动化流程,该流程从客户那里获取数千个出发地和目的地邮政编码,并使用 VBA 和 Excel 从我的铁路供应商那里收集价格。特别是一个提供商最近更新了他们的页面,要求我们在输入出发地/目的地邮政编码后选择一个城市/州组合。

我可以输入 zip 和这样的罚款;但是,我不知道这样做后如何选择列表项。以下是网站的 HTML。

邮政编码的输入框

这是我放入 zip 中的代码:(我在其中有 Select,希望能够展示 ul 表)

ieDoc.all.shipFromLocation.Value = oZip
ieDoc.all.shipFromLocation.Select
ieDoc.all.shipToLocation.Value = dZip
ieDoc.all.shipToLocation.Select

输入邮政编码后会出现这个ul框:

<ul class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all location-ac-menu" id="ui-id-1" tabindex="0" aria-disabled="false" style="display: none; width: 222.77777767181396px; top: 260.34715270996094px; left: 164.01385498046875px;">
<li><strong class="location-ac-heading">Please select:</strong></li>
<li class="ui-menu-item" role="presentation"><a id="ui-id-87" class="ui-corner-all" tabindex="-1">PHILA, PA 19106 US</a></li>
<li class="ui-menu-item" role="presentation"><a id="ui-id-88" class="ui-corner-all" tabindex="-1">WM PENN ANX E, PA 19106 US</a></li>
<li class="ui-menu-item" role="presentation"><a id="ui-id-89" class="ui-corner-all" tabindex="-1">WILLIAM PENN ANNEX E, PA 19106 US</a></li>
<li class="ui-menu-item" role="presentation"><a id="ui-id-90" class="ui-corner-all" tabindex="-1">PHILADELPHIA, PA 19106 US</a></li>
</ul>

看起来像这样:

【问题讨论】:

    标签: html css excel vba web-scraping


    【解决方案1】:

    CSS 选择器:

    没有更多的 HTML 或 URL,您可以使用 CSS 选择器(用于选择元素的模式)选择这些项目。

    .ui-menu-item[role="presentation"]
    

    上面的选择器中的.class selector,即通过className 选择元素。希望这足够具体,因为我还指定 className ui-menu-item 的元素应包含文本 role="presentation"

    更通用的方法可能是ieDoc.getElementsByClassName("ui-menu-item")


    HTML 示例上的 CSS 查询结果:

    查询显示返回了一个元素列表0-3,这将需要HTML元素(ieDoc变量)的.querySelectorAll方法来捕获所有匹配项并返回一个nodeList,然后可以迭代。


    VBA:

    Dim NodeList As Object, i As Long
    Set NodeList = ieDoc.querySelectorAll(".ui-menu-item[role=""presentation""]")
    
    For i = 0 To NodeList.Length - 1
        Debug.Print NodeList.item(i).Click '<==this way          '
       'Debug.Print NodeList(i).Click   '<==Or this method
    Next i
    

    您可能还需要先设置焦点,例如NodeList.item(i).focus ;假设方法支持。


    更多信息:

    看我的回答here

    【讨论】:

      【解决方案2】:

      您好,您可以尝试手动选择它,然后查看 URL 是否已更改。如果是,那么您可以简单地导航到此 URL,然后将选择所有内容。 可以发给我网址吗?

      最好的问候

      乌达尔

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 2020-07-01
        相关资源
        最近更新 更多