VBA 更改 Internet Explorer 中的下拉值

VBA to change dropdown value in internet explorer

我希望使用 Excel VBA 自动化 Internet Explorer 从网站中提取足球结果,当我更改下拉值时,我真的很难更新数据。

网址是:http://www.whoscored.com/Regions/250/Tournaments/30/Seasons/3871/Stages/8209/Fixtures/Europe-UEFA-Europa-League-2013-2014

我想更改 'stages' 下拉菜单的值并抓取匹配结果。

我的代码可以正常打开 IE,更改 'scrape' 下拉列表的值,但我无法获取要更新的数据。虽然我对 VBA 很满意,但我对 HTML 和 Javascript 知之甚少,尽管我可以猜出某些行在做什么。据我所知,有 javascript 代码处理更改事件,我只是看不到如何让它运行 - 我已经尝试按照我的建议在我的代码中触发 'onchange' 事件搜索但我无法让它工作。

这是我看到的控制下拉菜单的代码(我删除了其他下拉菜单的很多下拉值,因为它使这个 post 更长:

<div id="breadcrumb-nav">
.
.
<span><select id="stages" name="stages"><option selected="selected"     value="/Regions/250/Tournaments/30/Seasons/3871/Stages/8209">Europa League Group Stages</option>
<option value="/Regions/250/Tournaments/30/Seasons/3871/Stages/7816">Europa League  Qualification</option>
<option value="/Regions/250/Tournaments/30/Seasons/3871/Stages/8158">Europa League Grp. A</option>
<option value="/Regions/250/Tournaments/30/Seasons/3871/Stages/8159">Europa League Grp. B</option>
.
.
<option value="/Regions/250/Tournaments/30/Seasons/3871/Stages/8466">Europa League</option>
</select></span>


</div>


<script type="text/javascript">

$('#breadcrumb-nav select').change(function () {
NG.GA.trackEvent('BreadcrumbNav', this.id);
window.location.href = this.value;
// TODO: Disable all selects?
});

</script>

我的代码:

Sub ScrapeData()
Dim ie As InternetExplorer
Dim URL As String

URL = "http://www.whoscored.com/Regions/250/Tournaments/30/Seasons/3871/Stages/8466/Fixtures/Europe-UEFA-Europa-League-2013-2014"

Set ie = New InternetExplorer
ie.Visible = True
ie.navigate (URL)

Do
    DoEvents
Loop Until ie.readyState = 4

SelectValue ie, "/Regions/250/Tournaments/30/Seasons/3871/Stages/7816"
SelectValue ie, "/Regions/250/Tournaments/30/Seasons/3871/Stages/8209"

End Sub

Sub SelectValue(ByVal ie As InternetExplorer, ByVal value As String)
Dim htmlDoc As HTMLDocument
Dim ddStages As HTMLSelectElement
Dim idBreadCrumb As Object

Set htmlDoc = ie.document

With ie.document
    Set idBreadCrumb = .getelementbyid("breadcrumb-nav")
    Set ddStages = .getelementbyid("stages")
End With

ddStages.value = value
ddStages.FireEvent ("onchange")
'fireevent on ddStages didn't work so tried here too
idBreadCrumb.FireEvent ("onchange")

Do
    DoEvents
Loop Until ie.readyState = 4

End Sub

任何帮助将不胜感激。

一定有一些 JavaScript 在事件 "the select element has changed its value" 上执行。我的建议是,比执行 JavaScript 更容易,只需导航 link(因为 JS 在这里所做的只是更改您看到的 HTML 页面,而不是其中的元素同一个网页)。

因此,例如,我将替换为:

SelectValue ie, "/Regions/250/Tournaments/30/Seasons/3871/Stages/7816"

有了这个

ie.Navigate "http://www.whoscored.com/" & "/Regions/250/Tournaments/30/Seasons/3871/Stages/7816"

得到完全相同的结果。