Я пытаюсь закодировать инструмент, который позволит моим коллегам быстро рассчитать расстояние между списком сопряженных городов для сезонной, но довольно важной задачи для нашего отдела.
У меня сейчас работаетчерез API Google Maps Distance, но постоянные изменения в их политике и способах оплаты превращаются в настоящую проблему, потому что мы узнали, что инструмент перестал работать, когда нам нужно было его использовать.
Именно поэтому яЯ решил обойти проблему и избавиться от необходимости API.Это мой первый проект Scraping, поэтому я уверен, что есть лучшие способы его кодирования, но мое решение пока таково:
Sub Scrape2()
Dim IE As Object
Dim dist As Variant
Dim URL As String
Dim i As Integer
'Creates an Internet Explorer Object
Set IE = CreateObject("InternetExplorer.application")
URL = "https://www.entrecidadesdistancia.com.br"
With IE
.Visible = False ' "True" makes the object visible
.navigate URL 'Loads the website
'Waits until the site's ready
While IE.Busy
DoEvents
Wend
Do While .Busy
Loop
'Selects "origin" field and inserts text
.Document.getElementById("origem").Value = "Jandira, SP - Brasil"
'Selects "destination" field and inserts text
.Document.getElementById("destino").Value = "Cotia, SP - Brasil"
'Presses the GO button
For Each Button In .Document.getElementsByTagName("button")
Button.Click
Exit For
Next
'Waits until the site's ready
Do While .Busy
Loop
Do While .Busy
Loop
dist = .Document.getElementById("distanciarota").innerText
MsgBox (dist)
End With
IE.Quit
Set IE = Nothing
End Sub
Он открывает объект Internet Explorer, вставляет два города (которые я 'Заменим информацией, поступающей из моего инструмента, в конечном итоге) в правильные поля, нажмем GO, загрузим следующую страницу и ДОЛЖНЫ указать нужное мне число в MessageBox (который я заменю на целевую ячейку, когда получу эту работу).
Моя последняя проблема заключалась в том, что половину времени макрос останавливался и объявлял «Ошибка времени выполнения 424»: требуется объект »в этой строке:
.Document.getElementById("origem").Value = "Jandira, SP - Brasil"
Или в этой строке:
dist = .Document.getElementById("distanciarota").innerText
Мне удалось обойти это, вставив еще один период ожидания перед обеими «проблемными» строками, но это замедлило макрос больше, чем хотелось бы.
Тем не менее, теперь это всегдадоходит до конца строки, но когда это происходит, мой MessageBox выходит пустым.
Это информация, которая мне нужна:
<strong id="distanciarota">12.4 km</strong>
С этого сайта: https://www.entrecidadesdistancia.com.br/calcular-distancia/calcular-distancia.jsp
Любая помощь в получении яt в переменную или ячейку рабочего листа будет очень ценным.