VBA 更改 Internet Explorer 中的下拉值
VBA to change dropdown value in internet explorer
我希望使用 Excel VBA 自动化 Internet Explorer 从网站中提取足球结果,当我更改下拉值时,我真的很难更新数据。
我想更改 '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"
得到完全相同的结果。
我希望使用 Excel VBA 自动化 Internet Explorer 从网站中提取足球结果,当我更改下拉值时,我真的很难更新数据。
我想更改 '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"
得到完全相同的结果。