Страница динамически загружает это содержимое, поэтому запрос xhr к исходному URL не дает ожидаемого результата.
Однако вы можете посмотреть на вкладке сети браузера и найти конечную точку, которую страница использует для обновления контента через отдельную xhr.
В следующем я не уверен, если токен основан на времени, но вы можете исследовать это. Вам нужно удалить внешнюю строку jquery, но затем вы можете проанализировать внутренний json с помощью парсера json. Я использую jsonconverter.bas . Вы загружаете код jsonconverter.bas в стандартный модуль с именем JsonConverter, затем идете VBE> Инструменты> Ссылки> Добавить ссылку на Microsoft Scripting Runtime. Если вы не хотите использовать парсер json (парсер должен быть вашим предпочтением), вы можете использовать функцию split
для экстракции нужной вам информации.
Я бы настроил формат таблицы на вашем листе так, как вы хотите (например, как показано на веб-странице), с заголовками столбцов и строк, а затем назначил значения из переменных ниже для ячеек в пределах этот стол. Вы можете привязать к кнопке, чтобы вы могли обновить таблицу на листе по желанию.
Макет (и результат):
Код:
Option Explicit
Public Sub GetInfo()
Dim s As String, json As Object
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www1.hkex.com.hk/hkexwidget/data/getequityquote?sym=2&token=evLtsLsBNAUVTPxtGqVeG6jZbQlrF5FojHmveNua5GgTcjPuBcUs7GTV0hIBAgAI&lang=chi&qid=1560281438643&callback=jQuery311003616462678192556_1560281436567&_=1560281436568", False
.send
s = Split(Split(.responseText, "(")(1), ")")(0)
End With
Set json = JsonConverter.ParseJson(s)("data")("quote")
Dim sameDayHigh As Double, fiftyTwoWeekHigh As Double, sameDayLow As Double, fiftyTwoWeekLow As Double, timeInfo As String
sameDayHigh = json("hi")
sameDayLow = json("lo")
fiftyTwoWeekHigh = json("hi52")
fiftyTwoWeekLow = json("lo52")
timeInfo = json("updatetime")
With ThisWorkbook.Worksheets("Sheet1")
.Cells(1, 1) = timeInfo
.Cells(3, 2).Resize(1, 2) = Array(sameDayHigh, fiftyTwoWeekHigh)
.Cells(4, 2).Resize(1, 2) = Array(sameDayLow, fiftyTwoWeekLow)
End With
End Sub
сокращенная версия выше:
Option Explicit
Public Sub GetInfo()
Dim s As String, json As Object
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www1.hkex.com.hk/hkexwidget/data/getequityquote?sym=2&token=evLtsLsBNAUVTPxtGqVeG6jZbQlrF5FojHmveNua5GgTcjPuBcUs7GTV0hIBAgAI&lang=chi&qid=1560281438643&callback=jQuery311003616462678192556_1560281436567&_=1560281436568", False
.send
s = Split(Split(.responseText, "(")(1), ")")(0)
End With
Set json = JsonConverter.ParseJson(s)("data")("quote")
With ThisWorkbook.Worksheets("Sheet1")
.Cells(1, 1) = json("updatetime")
.Cells(3, 2).Resize(1, 2) = Array(json("hi"), json("hi52"))
.Cells(4, 2).Resize(1, 2) = Array(json("lo"), json("lo52"))
End With
End Sub