【问题标题】:Select an option from drop down list excel vba scraping从下拉列表中选择一个选项 excel vba 抓取
【发布时间】:2018-02-11 22:02:31
【问题描述】:
如何从下拉选项中选择一个项目(下拉列表在表格结构中)
Sub Test()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.navigate ("http://www.handelsregisterbekanntmachungen.de/?aktion=suche#Ergebnis")
Do: DoEvents: Loop Until .readyState = 4
'.document.getElementsByClassName("vt").Value = "1"
End With
End Sub
检查元素时,我发现 name 属性 ="vt" ..
感谢高级帮助
【问题讨论】:
标签:
excel
vba
select
web-scraping
option
【解决方案1】:
更通用的是使用 CSS 选择器。
从目标元素中收集所有选项并为所需选项编制索引:
例如,对于名称为 vt 的日期下拉列表,您可以使用 [name=vt] 选项
第一个选择器匹配目标父元素中具有name 属性且值为vt 的所有选项标记元素。
选择器组合是一个后代组合器,其中包括一个前导属性选择器,以针对天的父下拉列表。由于需要多个元素(所有选项),因此 querySelectorAll 方法用于返回一个节点列表,该节点列表被索引以将特定选项设置为选中:
Set list = .querySelectorAll("[name=vt] option") '<==nodeList
list.item(1).Selected = True
最后一行针对下拉菜单的第 1 天选项。
CSS 查询结果示例:
直接选择单个选项
再次使用Datum der Bekanntmachung 下拉的日期,您可以使用 CSS 选择器
[name=vt] option[value='2']
这是另一个组合两个属性选择器的后代组合器。父元素具有vt 的name 属性,目标、单数选项、子元素具有option 标签和属性value,其值为2。这针对下拉菜单的第 2 天选项。
VBA:
Option Explicit
Public Sub MakeSelections()
Dim IE As New InternetExplorer
With IE
.Visible = True
.navigate "http://www.handelsregisterbekanntmachungen.de/?aktion=suche#Ergebnis"
While .Busy Or .readyState < 4: DoEvents: Wend
Dim list As Object
With .document
Set list = .querySelectorAll("[name=vt] option")
list.item(1).Selected = True '<==select first from list
.querySelector("[name=vt] option[value='2']").Selected = True '<Select second direct
End With
Stop '<== Delete me later
.Quit
End With
End Sub
【解决方案2】:
我可以通过遍历标签名称“select”来解决这个问题
For Each e In ie.document.getElementsByTagName("select")
'Stuff of code
Next e
非常感谢