programing

일부 점을 클릭하여 정보를 긁어낼 수 없음

bestprogram 2023. 9. 9. 09:47

일부 점을 클릭하여 정보를 긁어낼 수 없음

웹 페이지의 지도에서 사용 가능한 점을 클릭하기 위해 IE와 함께 vba로 스크립트를 작성했습니다.점을 클릭하면 관련 정보가 들어 있는 작은 상자가 나타납니다.

해당 웹 사이트 링크

저는 각 박스의 내용을 파싱하고 싶습니다.해당 상자의 내용은 클래스 이름을 사용하여 찾을 수 있습니다.contentPane. 그러나 여기서의 주된 관심사는 해당 점들을 클릭하여 각 상자를 생성하는 것입니다.상자가 나타나면 아래 이미지에서 어떻게 볼 수 있는지 보여줍니다.

제가 지금까지 시도해본 대본은 이렇습니다.

Sub HitDotOnAMap()
    Const Url As String = "https://www.arcgis.com/apps/Embed/index.html?webmap=4712740e6d6747d18cffc6a5fa5988f8&extent=-141.1354,10.7295,-49.7292,57.6712&zoom=true&scale=true&search=true&searchextent=true&details=true&legend=true&active_panel=details&basemap_gallery=true&disable_scroll=true&theme=light"
    Dim IE As New InternetExplorer, HTML As HTMLDocument
    Dim post As Object, I&
    
    With IE
        .Visible = True
        .navigate Url
        While .Busy = True Or .readyState < 4: DoEvents: Wend
        Set HTML = .document
    End With
    
    Application.Wait Now + TimeValue("00:0:07")  ''the following line zooms in the slider
    HTML.querySelector("#mapDiv_zoom_slider .esriSimpleSliderIncrementButton").Click
    Application.Wait Now + TimeValue("00:0:04")
    
    With HTML.querySelectorAll("[id^='NWQMC_VM_directory_'] circle")
        For I = 0 To .Length - 1
            .item(I).Focus
            .item(I).Click
            Application.Wait Now + TimeValue("00:0:03")
            Set post = HTML.querySelector(".contentPane")
            Debug.Print post.innerText
            HTML.querySelector("[class$='close']").Click
        Next I
    End With
End Sub

위의 스크립트를 실행하면 원활하게 실행되는 것처럼 보이지만 아무 일도 발생하지 않으며(클릭 없음), 오류도 발생하지 않습니다.마지막으로 브라우저를 우아하게 종료합니다.

이것은 점을 클릭했을 때 정보가 있는 상자의 모양입니다.

enter image description here

스크립트 내에서 하드코딩된 지연을 사용했지만 매크로가 작동하기 시작하면 나중에 수정할 수 있습니다.

질문:.해당 지도의 각 점을 클릭하고 팝업창에서 관련 정보를 수집하려면 어떻게 해야 합니까?사용하는 솔루션을 기대할 뿐입니다.Internet Explorer

여기서는 데이터가 주요 관심사가 아닙니다.그런 경우에 제가 어떻게 일하는지를 알고 싶어서 앞으로의 경우에 대처할 수 있도록 하고 싶습니다.IE 이외의 솔루션은 제가 찾고 있는 것이 아닙니다.

각 점을 클릭할 필요가 없습니다.Json 파일은 모든 세부사항을 가지고 있으며 요구사항에 따라 추출이 가능합니다.


Json Converter 설치

  1. 최신 릴리스 다운로드
  2. 프로젝트로 JsonConverter.bas 가져오기(VBA Editor 열기, Alt + F11; 파일 > 파일 가져오기) 사전 참조/클래스 추가
  3. Windows(윈도우) 전용인 경우 "Microsoft Scripting Runtime(마이크로소프트 스크립팅 런타임)"에 대한 참조를 포함합니다.
  4. 윈도우즈 및 Mac의 경우 VBA-사전을 포함합니다.

추가할참조서

enter image description here


여기서 샘플 파일다운로드합니다.


코드:

Sub HitDotOnAMap()

    Const Url As String = "https://www.arcgis.com/sharing/rest/content/items/4712740e6d6747d18cffc6a5fa5988f8/data?f=json"
    Dim IE As New InternetExplorer, HTML As HTMLDocument
    Dim post As Object, I&
    Dim data As String, colObj As Object

    With IE
        .Visible = True
        .navigate Url
        While .Busy = True Or .readyState < 4: DoEvents: Wend
        data = .document.body.innerHTML
        data = Replace(Replace(data, "<pre>", ""), "</pre>", "")
    End With

    Dim JSON As Object
    Set JSON = JsonConverter.ParseJson(data)
    Set colObj = JSON("operationalLayers")(1)("featureCollection")("layers")(1)("featureSet")

    For Each Item In colObj("features")


         For j = 1 To Item("attributes").Count - 1
                Debug.Print Item("attributes").Keys()(j), Item("attributes").Items()(j)

         Next
    Next
End Sub

산출량

enter image description here

언급URL : https://stackoverflow.com/questions/51526683/cant-click-on-some-dots-to-scrape-information