2015-02-01 2 views
0

URL에 도달하려고 할 때 코드가 독해 루프에 걸려서로드되지 않습니다. readystate는 영구히 1로 유지됩니다. 코드를 일시 중지하고 디버그를 누르면 커서가 내 프로 시저 주위를 기괴한 순서로 건너 뜁니다. 때로는 끝에서 끝으로, 때로는 시작 부분으로 건너 뛰기도합니다.IE Readystate가 VBA 웹 스크래핑 중 1에서 멈춤

이 글은 자바 스크립트에서 문제가 될 수 있지만 모든 해결책을 찾을 수없는 것으로 보입니다.

작동시키기위한 방법이 있습니까?

Sub Navigate() 

    IE.Visible = True 
    IE.Navigate ("http://web.vermont.org/Accounting?ysort=true") 

    Do While IE.ReadyState <> 4 
      DoEvents 
    Loop 


    Set Doc = IE.Document 

End Sub 

답변

1

해당 서버는 XML 요청에 매우 잘 응답하고 나머지 페이지는 콘텐츠로 이동하지 않아도됩니다.

Sub Get_Listings() 
    Dim sURL As String, iDIV As Long, htmlBDY As HTMLDocument, xmlHTTP As MSXML2.ServerXMLHTTP60 

    Set xmlHTTP = New MSXML2.ServerXMLHTTP60 
    Set htmlBDY = New HTMLDocument 

    'sURL = "http://web.vermont.org/Accounting?ysort=true" 
    sURL = "http://web.vermont.org/Dining?ysort=true" 


    With xmlHTTP 
     .Open "GET", sURL, False 
     .setRequestHeader "Content-Type", "text/xml" 
     .send 
     Do While .readyState <> READYSTATE_COMPLETE: DoEvents: Loop 
     If .Status <> 200 Then GoTo CleanUp 
     htmlBDY.body.innerHTML = .responseText 
    End With 

    With htmlBDY 
     For iDIV = 0 To (.getElementsByclassname("ListingResults_All_ENTRYTITLELEFTBOX").Length - 1) 
      If CBool(.getElementsByclassname("ListingResults_All_ENTRYTITLELEFTBOX")(iDIV).getElementsByTagName("a").Length) Then 
       Debug.Print _ 
        .getElementsByclassname("ListingResults_All_ENTRYTITLELEFTBOX")(iDIV).getElementsByTagName("a")(0).innertext 
      End If 
     Next iDIV 
    End With 

CleanUp: 
    Set htmlBDY = Nothing 
    Set xmlHTTP = Nothing 
End Sub 

Microsoft XML 6.0, Microsoft HTML 개체 라이브러리 및 Microsoft 인터넷 컨트롤이 도구, 참조에 추가되어 있어야합니다. 로봇 스 크레이퍼의 사용을 금지 한 해당 사이트에서 사용 약관을 찾을 수 없으므로이 스 니펫을 제공하고 있습니다. 반복적 인 스크래핑 요청으로 인해 IP가 금지되지 않도록주의하십시오.

+0

응답 해 주셔서 감사합니다. 나는 이것에 완전한 초심자이고 아직도 나의 방법을 주변에 배우기. 이 방법으로 XML을 사용하는 것에 익숙하지 않습니다. 내가 읽을 수있는 사이트 또는 방법을 추천 해 주시겠습니까? – Mike

+0

@Mike - 이것은 어떤 사이트와 마찬가지로 좋은 사이트이지만 초기 검색을 [XMLHTTP] (http://stackoverflow.com/search?q=XMLHTTP)와 같은 것으로 좁혀 야합니다. 버전 특정 문제는 초기 개념을 얻은 후 여러 목적으로 재사용 할 수있는 빈 코드 모델을 작성하기 시작하면 해결 될 수 있습니다. – Jeeped