Гораздо быстрее выдать запрос xmlhtttp без открытия браузера и анализа json, скрытого в одном из атрибутов (data-DIContracts
) ответа.
Я использую jsonconverter.bas, который вы можете загрузить с здесь . Как только вы добавите .bas в свой проект, перейдите в vbe> tools> reference и добавьте ссылку на Microsoft Scripting Runtime
, а одну для Microsoft HTML Object Library
.
.
Линия
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
защищает от кеширования результатов при частых обновлениях страниц.
Option Explicit
Public Sub GetTable()
Dim sResponse As String, html As HTMLDocument, json As Object, i As Long
Application.ScreenUpdating = False
Set html = New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.infomoney.com.br/mercados/ferramentas/contratos-di-futuro", False
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
sResponse = StrConv(.responseBody, vbUnicode)
End With
With html
.body.innerHTML = sResponse
Set json = JsonConverter.ParseJson(.querySelector("#serverDI").getAttribute("data-DIContracts"))
End With
With ThisWorkbook.Worksheets("Sheet1")
.Cells.ClearContents
.Cells(1, 1).Resize(1, UBound(json(1).keys) + 1) = json(1).keys
For i = 1 To json.Count
.Cells(i + 1, 1).Resize(1, UBound(json(i).keys) + 1) = json(i).Items
Next
End With
Application.ScreenUpdating = True
End Sub