vba getElementById, сгенерированный javascript - PullRequest
1 голос
/ 21 мая 2019

В настоящее время я пытаюсь загрузить значение div на следующей странице: http://www.banrep.gov.co/es/tasa-cambio-del-peso-colombiano-trm это значение div генерируется с помощью JavaScript.Может кто-нибудь сказать мне, если это возможно, чтобы загрузить это значение, которое генерируется с помощью JavaScript с VBA?

Изображение страницы

это мой код:

Sub Basics_Of_Web_Macro()

    Dim myIE As Object
    Dim myIEDoc As Object

    Set myIE = CreateObject("InternetExplorer.Application")

    myIE.Visible = True

    myIE.navigate "http://www.banrep.gov.co/es/tasa-cambio-del-peso-colombiano-trm"

    While myIE.Busy
        DoEvents
    Wend

    Set myIEDoc = myIE.document


    MsgBox myIEDoc.Title

    MsgBox myIEDoc.getElementById("div_datos").innerText

End Sub

1 Ответ

0 голосов
/ 30 мая 2019

Существует альтернативный URL, который страница использует для получения этого контента.Вы можете вывести значение из ответа.Вы можете обобщить регулярное выражение в соответствии с вариантами использования.

Попробуйте регулярное выражение здесь

Option Explicit
Public Sub Test()
    Dim s As String, re As Object, p As String
    p = "new Array\(.*, ""\d+,\d+"",""(\d+\.\d+,\d+)""\);"
    Set re = CreateObject("VBScript.RegExp")

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "http://obieebr.banrep.gov.co/analytics/saw.dll?Go&path=%2Fshared%2fSeries%20Estad%c3%adsticas_T%2F1.%20Tasa%20de%20Cambio%20Peso%20Colombiano%2F1.1%20TRM%20-%20Disponible%20desde%20el%2027%20de%20noviembre%20de%201991%2F1.1.6.TCM_TRM%20para%20un%20d%C3%ADa&lang=es&options=rdf&NQUser=publico&NQPassword=publico", False
        .send
        s = .responseText
        Debug.Print GetValue(re, s, p)        
    End With
End Sub

Public Function GetValue(ByVal re As Object, inputString As String, ByVal pattern As String) As String
    With re
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .pattern = pattern
        If .Test(inputString) Then
            GetValue = .Execute(inputString)(0).SubMatches(0)
        Else
            GetValue = "Not found"
        End If
    End With
End Function

Объяснение регулярного выражения:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...