我编写了一个用 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>
看起来像这样:
最佳答案
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 .
关于html - 如何使用 ie vba web-scrape 脚本选择 <li>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25352002/