2015-01-02 3 views
0

Excel VBA를 사용하여 인터넷 익스플로러를 자동화하여 웹 사이트에서 축구 결과를 추출하고 드롭 다운 값을 변경할 때 데이터를 업데이트하는 데 어려움을 겪고 있습니다.인터넷 익스플로러에서 드롭 다운 값을 변경하는 VBA

웹 사이트는 다음과 같습니다 나는 '단계'드롭 다운의 값을 변경하고 경기 결과를 긁어 찾고 http://www.whoscored.com/Regions/250/Tournaments/30/Seasons/3871/Stages/8209/Fixtures/Europe-UEFA-Europa-League-2013-2014

.

내 코드는 IE를 열 때 '긁힌 자국'드롭 다운의 값을 변경하면 제대로 작동하지만 업데이트 할 데이터를 가져올 수 없습니다. VBA에 익숙한 편이지만 HTML과 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
execut보다 훨씬 쉽게. 나의 제안 "선택 요소가 그 값을 변경"이 이벤트에서 실행 일부 자바 스크립트를해야합니다

자바 스크립트를 작성하는 것은 링크를 탐색하는 것입니다 (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" 

와 정확히 같은 결과를 얻을 수 있습니다.

+0

정말 감사합니다. 웹 스크래핑을 배우기 위해 찾고있는 것처럼 자바 스크립트를 실행하여 이것을 달성하는 방법을 알고 있습니까? – Ash

+0

@Ash 유용한 경우 upvote를 잊지 마시고 작동하면 표시하십시오.) –

+0

@Ash 이것은 다른 이야기입니다. 자바 스크립트는 브라우저에서 해석 한 코드이므로 VBA에서이를 수행 할 수 없습니다. 아니면 VBA를 통해 _ 할 수도 있지만 일반적으로 가치가 없습니다. 어쨌든, JavaScript는 HTML 파일을 수정하는 데 사용되지만 VBA에는 이미 JS 기능이 통합 된 라이브러리가 있습니다. [here] (http : //ramblings.mcpher.com/Home/excelquirks/snippets/scriptcontrol)에서 시작하실 수 있습니다. 그러나 다시 당신이 추구하는 목표에 대해서는 가치가 없다고 말할 수 있습니다. –

관련 문제