【发布时间】:2018-12-20 15:42:01
【问题描述】:
我正在尝试循环浏览下拉菜单的选项或项目,但我不知道项目的数量,因为它每次都会更改。
这是 sList3 的 html 部分
<select name="ctl00$ContentPlaceHolder1$Dschool" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$Dschool\',\'\')', 0)" id="ContentPlaceHolder1_Dschool" style="font-size:12pt;font-weight:bold;width:500px;">
<option selected="selected" value="0"> Select From Menu </option>
<option value="311223">first option</option>
<option value="311625">some option</option>
</select>
这是我已经开始的代码
For i = 1 To 4
Set sList1 = .FindElementById("ContentPlaceHolder1_Dedara").AsSelect
sList1.SelectByIndex i
.Wait 2000
Set sList2 = .FindElementById("ContentPlaceHolder1_Drel").AsSelect
sList2.SelectByIndex 1
.Wait 2000
Set sList3 = .FindElementById("ContentPlaceHolder1_Dschool").AsSelect
'How can I loop through the options (unknown in length)
Next i
我想循环每个选项并 debug.print 选项的值。
解决方案
在 JeffC 的帮助下,这是最终的解决方案
For j = 1 To sList3.Options.Count
Debug.Print sList3.Options(j).Text
Next j
【问题讨论】:
-
我认为你可以通过
sList3.children()或其他类似的方式来for each?这就是它与HtmlDocumentiirc 一起工作的方式 -
我尝试了
For Each e In sList3.Children(),但没有成功,并且出现错误。 -
.AsSelect上没有Options列表吗?如果不出意外,您可以计算作为SELECT子级的OPTIONs 的数量。 -
非常感谢。我没明白你的意思?你能给我一行代码来计算选项,因为我注意到其中一些列表是空的并且没有选项..
-
我不使用 VBA Selenium ...我使用 C#(以前是 Java)。在 C# 中,我们有
new SelectElement(driver.FindElement(...)).Options这是一个元素列表。您可以在末尾打一个.Count并获取选项数量。我不知道你在 VBA 中是否有等价物,但我假设你有,因为你有一个.AsSelect。如果我猜的话,应该是.FindElementById(...).AsSelect.Options。如果你有 Intellisense,当你在.AsSelect之后输入.时,你应该得到一个方法/属性列表。浏览该列表,看看你能找到什么。
标签: excel vba selenium selenium-webdriver web-scraping