我希望使用Excel VBA自动化Internet Explorer以从网站中提取足球结果,并且在更改下拉值时我真的很难获取数据更新。
我希望改变'阶段的价值。下拉并刮掉比赛结果。
我的代码可以正常打开IE,更改' scrape'下拉列表,但我无法获取要更新的数据。虽然我对VBA感到满意,但我对HTML和Javascript知之甚少,尽管我可以猜到一些行在做什么。从我可以看到有javascript代码处理更改事件,我只是无法看到如何让它运行 - 我已经尝试触发' onchange'我的代码中的事件是根据我的搜索建议的,但我无法让它发挥作用。
这是我可以看到的控制下拉列表的代码(我删除了很多其他下拉列表的下拉值,因为它使这篇文章的篇幅更长:
<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
任何帮助都会非常感激。
答案 0 :(得分:0)
必须在事件上执行一些JavaScript“select元素已更改其值”。我的建议,比执行JavaScript更容易,只是导航链接(因为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"
获得完全相同的结果。