我试图通过Excel使用VBA抓取一些数据。我对VBA非常生疏,但我对我的google-fu充满信心,5个多小时后也没有运气。我已经看到很多方法可以使用下拉菜单,但似乎没有一种方法可以使用这个菜单。我已成功导航到https://www.kbb.com/used-cars/,但我无法使用"年"落下。也许我没有使用正确的ID /名称?如果我留下任何重要信息,请告知我们。
代码:
Sub WebForumEntry()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Top = 0
IE.Left = 0
IE.Width = 800
IE.Height = 600
IE.AddressBar = 0
IE.StatusBar = 0
IE.Toolbar = 0
IE.Navigate "http://www.kbb.com"
IE.Visible = True
Do
DoEvents
Loop Until IE.ReadyState = 4
'Click on the "Used Car Values" link
Set AllHyperlinks = IE.document.getelementsbytagname("A")
For Each hyper_link In AllHyperlinks
If hyper_link.innertext = "Used Car Prices" Then
hyper_link.Click
Exit For
End If
Next
'Select model year"
Set e = IE.document.getElementbyid("yearDropdown")
Dim o
For Each o In e.Options
If o.Value = "2012" Then
o.Selected = True
Exit For
End If
Next
End Sub
答案 0 :(得分:0)
在HTML中没有Option
个标签供您选择:
<div class="form-group">
<select id="yearDropdown" name="yearId" class="dropdown-one year-dropdown" data-default-option="Year" data-preselected-value=""></select>
</div>
这些年份是根据您是选择新的/使用的等动态生成的。因此您无法选择不存在的内容 - 也许您可以直接设置值,例如:
IE.document.getElementbyid("yearDropdown").value = "2012"
请注意原始代码中存在问题:
'Click on the "Used Car Values" link
Set AllHyperlinks = IE.document.getelementsbytagname("A")
For Each hyper_link In AllHyperlinks
If hyper_link.innertext = "Used Car Prices" Then
hyper_link.Click
Exit For
End If
Next
'Select model year"
Set e = IE.document.getElementbyid("yearDropdown") '<-- error here if page not loaded per hyper_link.Click
当您调用hyper_link.Click
时,它将加载另一个页面(下拉列表所在的位置),然后根据Exit For
运行的下一个命令是Set e = IE...
,它将尝试访问一个元素尚不存在,因为页面仍按hyper_link.Click
加载。要解决这个问题,你可以像下面这样暂停:
Application.Wait Now + TimeValue("0:00:04")
这有点像黑客 - 而且可能有更好的方法来解决它 - 但它会让你根据我的第一个建议设置下拉列表:
完整代码(重写你的代码):
Option Explicit
Sub WebForumEntry()
Dim IE As Object
Dim AllHyperLinks As Object
Dim hyper_link As Object
Dim e As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Top = 0
IE.Left = 0
IE.Width = 800
IE.Height = 600
IE.AddressBar = 0
IE.StatusBar = 0
IE.Toolbar = 0
IE.Navigate "http://www.kbb.com"
IE.Visible = True
' wait for page to load
Do
DoEvents
Loop Until IE.ReadyState = 4
'Click on the "Used Car Values" link
Set AllHyperLinks = IE.document.getelementsbytagname("A")
For Each hyper_link In AllHyperLinks
If hyper_link.innertext = "Used Car Prices" Then
hyper_link.Click
Exit For
End If
Next
'wait 4 seconds - so page fully loads
Application.Wait Now + TimeValue("0:00:04")
'Select model year"
Set e = IE.document.getElementbyid("yearDropdown")
' set a year
e.Value = "2016"
End Sub
答案 1 :(得分:0)
...尝试访问一个尚不存在的元素,因为页面仍在加载...只是暂停
太棒了,谢谢罗宾!