Ваш текущий код запрашивает исходный код HTML и пытается его очистить.
Однако, как объясняется в комментариях, список местоположений динамически загружается, когда вы нажимаете на строку поиска, и он не является частью источника страницы HTML. По этой причине ваш код не даст результатов.
Имеет смысл почистить страницу, посвященную местоположениям:
https://www.europcar.co.za/rental-locations/
Теперь, если вы перейдете на эту страницу и осмотрите сетевой трафик c в инструментах разработчика вашего браузера ( F12 ) при загрузке страницы, вы увидите, что XHR
Запрос отправляется. Выглядит это так:
Если вы go через заголовки и параметры запроса, вы увидите, как URL, тело и Заголовки должны выглядеть следующим образом. В этом конкретном случае параметры отсутствуют, а заголовки не являются необходимыми для успешного выполнения запроса, поэтому все, что вам нужно, - это URL.
Полезная нагрузка ответа в формате json. Вы можете проверить его структуру, используя инструмент, подобный this . Вот как это выглядит:
По сути, JSON состоит из разных стран, каждая страна состоит из провинций, а каждая провинция состоит из соответствующие ветки. Каждая ветвь состоит из всей соответствующей информации.
Для такого анализа ответа вам необходим анализатор JSON (см. В конце этого поста).
TL; DR
Вот как должен выглядеть код:
Option Explicit
Sub getLocations()
Dim req As New WinHttpRequest
Dim url As String, results() As String
Dim sht As Worksheet
Dim responseJSON As Object, country As Object, province As Object, branch As Object
Dim i As Long
Dim rng As Range
Set sht = ThisWorkbook.Worksheets("Name of your Worksheet")
url = "https://www.europcar.co.za/api/rentalLocations/impressLocations"
With req
.Open "GET", url, False
.send
Set responseJSON = JsonConverter.ParseJson(.responseText)
End With
For Each country In responseJSON
For Each province In country("provinces")
i = 0
ReDim results(1 To province("branches").Count, 1 To 5)
For Each branch In province("branches")
i = i + 1
results(i, 1) = country("name")
results(i, 2) = province("name")
results(i, 3) = branch("name")
results(i, 4) = branch("emailAddress")
results(i, 5) = branch("contactNumber")
Next branch
With sht
Set rng = .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0)
End With
rng.Resize(UBound(results, 1), UBound(results, 2)) = results
Next province
Next country
End Sub
В демонстрационных целях приведенный выше код выводит результаты в следующим образом:
Имея в виду структуру JSON и приведенный мной пример кода, вы можете легко изменить его в соответствии со своими потребностями.
Чтобы код работал, вам нужно добавить следующие ссылки на ваш проект (VBE> Инструменты> Ссылки):
1. Microsoft WinHTTP Services version 5.1
2. Microsoft Scripting Runtime
Вам также необходимо добавить this JSON parser для вашего проекта. Следуйте инструкциям по установке в ссылке, и вы должны быть установлены на go.