일부 점을 클릭하여 정보를 긁어낼 수 없음
웹 페이지의 지도에서 사용 가능한 점을 클릭하기 위해 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
위의 스크립트를 실행하면 원활하게 실행되는 것처럼 보이지만 아무 일도 발생하지 않으며(클릭 없음), 오류도 발생하지 않습니다.마지막으로 브라우저를 우아하게 종료합니다.
이것은 점을 클릭했을 때 정보가 있는 상자의 모양입니다.
스크립트 내에서 하드코딩된 지연을 사용했지만 매크로가 작동하기 시작하면 나중에 수정할 수 있습니다.
질문:.해당 지도의 각 점을 클릭하고 팝업창에서 관련 정보를 수집하려면 어떻게 해야 합니까?사용하는 솔루션을 기대할 뿐입니다.Internet Explorer
여기서는 데이터가 주요 관심사가 아닙니다.그런 경우에 제가 어떻게 일하는지를 알고 싶어서 앞으로의 경우에 대처할 수 있도록 하고 싶습니다.IE 이외의 솔루션은 제가 찾고 있는 것이 아닙니다.
각 점을 클릭할 필요가 없습니다.Json 파일은 모든 세부사항을 가지고 있으며 요구사항에 따라 추출이 가능합니다.
Json Converter 설치
- 최신 릴리스 다운로드
- 프로젝트로 JsonConverter.bas 가져오기(VBA Editor 열기, Alt + F11; 파일 > 파일 가져오기) 사전 참조/클래스 추가
- Windows(윈도우) 전용인 경우 "Microsoft Scripting Runtime(마이크로소프트 스크립팅 런타임)"에 대한 참조를 포함합니다.
- 윈도우즈 및 Mac의 경우 VBA-사전을 포함합니다.
추가할참조서
여기서 샘플 파일을 다운로드합니다.
코드:
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
산출량
언급URL : https://stackoverflow.com/questions/51526683/cant-click-on-some-dots-to-scrape-information
'programing' 카테고리의 다른 글
도커 컨테이너의 실행 명령을 표시하는 방법 (0) | 2023.09.09 |
---|---|
집합에 값 배열을 추가하는 방법 (0) | 2023.09.09 |
Oracle 10g을 사용한 후속 잠금에 대한 동면 경고 (0) | 2023.09.09 |
Angular Service Worker - 리소스 로드 실패: 서버가 504(게이트웨이 시간 초과) 상태로 응답했습니다. (0) | 2023.09.09 |
C# 문자열 참조 유형? (0) | 2023.09.09 |