Я ищу для автоматизации интернет-исследователя с помощью Excel VBA для извлечения результатов футбола с веб-сайта и действительно борюсь с получением данных для обновления при изменении значения выпадающего списка.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
Любая помощь будет очень ценна.
спасибо за ваше предложение, так очевидно. Поскольку я ищу, чтобы изучить веб-скребок, вы знаете, как достичь этого, выполнив javascript? – Ash
@Ash не забывайте поднимать, если полезно, отметьте, если работает;) –
@ Аш это еще одна история. JavaScript - это код, интерпретируемый браузером, вы не можете сделать это из VBA. Или лучше, вы _might_ делаете это через VBA, но это не достойно, в общем. Во всяком случае, JavaScript используется для изменения HTML-файлов, но у VBA уже есть библиотеки, которые включают функции JS. Вы можете начать с [здесь] (http://ramblings.mcpher.com/Home/excelquirks/snippets/scriptcontrol), но опять же для цели, которую вы преследуете, я бы сказал, что это не достойно. –