XHR:
Вы можете использовать xhr и имитировать POST-запрос, который делает страница для получения информации о рейсе. Ваш выбор, например количество взрослых, пункт назначения ..... перейти в POST тела. Вы получаете ответ json со всей информацией. Я использую этот парсер json для обработки ответа и генерирования объекта json для работы.
Исследуйте ответ json здесь .
Ниже приведен 1 взрослый и обратно, Дубай, все аэропорты, Лондон, все выбранные аэропорты, эконом. Вы можете объединить значения для ваших критериев поиска.
Сравнение снимков json, возвращенных из запроса POST (показывает часть для первого этапа полета в Лондон через Кигали
![enter image description here](https://i.stack.imgur.com/JAdIS.png)
Option Explicit
Public Sub GetFlights()
'install code from https://github.com/VBA-tools/VBA-JSON/blob/master/JsonConverter.bas to a module in project
'VBE > Tools > References > Add reference to Microsoft Scripting Runtime
Dim json As Object
Dim body As String
body = "{""TripType"":""Return"",""Adults"":""1"",""Children"":""0"","
body = body & """Infants"":""0"",""Class"":""Economy"","
body = body & """FlightStops"":[{""CityFromCode"":""DXB"",""CityToCode"":""LON"",""DepartureDate"":""2019-05-30"",""ReturnDate"":""2019-06-01"",""TsaAirportFromCode"":""DXBALL"",""TsaAirportToCode"":""LON""}],"
body = body & """ShowMixAndMatch"":false,""Locale"":""en-AU""}"
With CreateObject("MSXML2.XMLHTTP")
.Open "POST", "https://flights.webjet.com.au/api/HybridSearch/GetFlightSearchResults?instart_disable_injection=true", False
.setRequestHeader "Accept", "application/json, text/plain, */*"
.send body
Set json = JsonConverter.ParseJson(.responseText)
End With
Stop
End Sub
Internet Explorer:
Вы можете установить даты с помощью javascript (для сохранения записи)
Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub GetPrices()
Dim ie As New InternetExplorer
With ie
.Visible = True
.Navigate2 "https://www.webjet.com.au/flights/"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document
With .querySelector("#departure-airport")
.Focus
.Value = "Dubai, United Arab Emirates - All Airports (DXB)"
End With
Application.Wait Now + TimeSerial(0, 0, 1)
With .querySelector("#destination-airport")
.Focus
.Value = "London, United Kingdom - All Airports (LON)"
End With
Application.Wait Now + TimeSerial(0, 0, 1)
With .querySelector("#ft-dates-return")
.Focus
.Value = "Thu 30 May 2019 - Tue 4 Jun 2019"
.FireEvent "onchange"
End With
.parentWindow.execScript "document.querySelector('#ft-hidden-check-in-date-return').value = 'Thu 30 May 2019';"
.parentWindow.execScript "document.querySelector('#ft-hidden-check-out-date-return').value = 'Tue 4 Jun 2019';"
.parentWindow.execScript "document.querySelector('#ft-hidden-popover-date-return').value = 'Thu 30 May 2019 - Tue 4 Jun 2019';"
Application.Wait Now + TimeSerial(0, 0, 1)
.querySelector("#zsl-button-search").Click
End With
While .Busy Or .readyState < 4: DoEvents: Wend
Stop
.Quit
End With
End Sub
Со взрослыми, детьми ....
Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub GetPrices()
Dim html As HTMLDocument, ie As New InternetExplorer
Set html = New HTMLDocument
Const ADULTS As Long = 2
Const CHILDREN As Long = 2
Const INFANTS As Long = 1 'infants cannot be greater than number of adults
With ie
.Visible = True
.Navigate2 "https://www.webjet.com.au/flights/"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document
With .querySelector("#departure-airport")
.Focus
.Value = "Dubai, United Arab Emirates - All Airports (DXB)"
End With
Application.Wait Now + TimeSerial(0, 0, 1)
With .querySelector("#destination-airport")
.Focus
.Value = "London, United Kingdom - All Airports (LON)"
End With
Application.Wait Now + TimeSerial(0, 0, 1)
With .querySelector("#ft-dates-return")
.Focus
.Value = "Thu 30 May 2019 - Tue 4 Jun 2019"
.FireEvent "onchange"
End With
.parentWindow.execScript "document.querySelector('#ft-hidden-check-in-date-return').value = 'Thu 30 May 2019';"
.parentWindow.execScript "document.querySelector('#ft-hidden-check-out-date-return').value = 'Tue 4 Jun 2019';"
.parentWindow.execScript "document.querySelector('#ft-hidden-popover-date-return').value = 'Thu 30 May 2019 - Tue 4 Jun 2019';"
Application.Wait Now + TimeSerial(0, 0, 1)
.querySelector("#button-passengers .zsl-caret-down").Click
Do
.querySelector("[aria-label='Increase adult passengers']").Click
Loop Until .querySelector("#number-of-adults") = ADULTS
Do
.querySelector("[aria-label='Increase child passengers 2-11 years old']").Click
Loop Until .querySelector("#number-of-children") = CHILDREN
Do
.querySelector("[aria-label='Increase infant passengers less than 2 years old']").Click
Loop Until .querySelector("#number-of-infants") = IIf(INFANTS > ADULTS, ADULTS, INFANTS)
Application.Wait Now + TimeSerial(0, 0, 1)
.querySelector("#zsl-button-search").Click
End With
While .Busy Or .readyState < 4: DoEvents: Wend
Stop
.Quit
End With
End Sub