Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 由javascript生成的vba getElementById_Excel_Vba_Dom_Web Scraping - Fatal编程技术网

Excel 由javascript生成的vba getElementById

Excel 由javascript生成的vba getElementById,excel,vba,dom,web-scraping,Excel,Vba,Dom,Web Scraping,我目前正试图在下一页下载div的值:这个div值是用javascript生成的。有人能告诉我是否可以下载用VBA的javascript生成的值吗 这是我的代码: Sub Basics_Of_Web_Macro() Dim myIE As Object Dim myIEDoc As Object Set myIE = CreateObject("InternetExplorer.Application") myIE.Visible = True m

我目前正试图在下一页下载div的值:这个div值是用javascript生成的。有人能告诉我是否可以下载用VBA的javascript生成的值吗

这是我的代码:

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

页面使用另一个url获取该内容。您可以将响应中的值正则化。您可以根据用例更多地概括正则表达式

试试正则表达式

正则表达式解释:


页面使用另一个url获取该内容。您可以将响应中的值正则化。您可以根据用例更多地概括正则表达式

试试正则表达式

正则表达式解释:


顺便说一句,完全可以获得该值。Sub Basics\u Of_Web\u Macro()Dim myIE As Object Dim myIEDoc As Object Set myIE=CreateObject(“InternetExplorer.Application”)myIE.Visible=True myIE.navigate“”虽然myIE.Busy DoEvents Wend Set myIEDoc=myIE.document MsgBox myIEDoc.Title MsgBox myIEDoc.getElementById(“div_datos”).innerText End子这是我的代码,但当我试图获取div的值时,它会发送一个错误BTW,完全有可能获取该值Dim myIE As Object Dim myIEDoc As Object Set myIE=CreateObject(“InternetExplorer.Application”)myIE.Visible=True myIE.navigate“”,而myIE.Busy DoEvents Wend Set myIEDoc=myIE.document MsgBox myIEDoc.Title MsgBox myIEDoc.getElementById(“div_datos”).innerText End子项这是我的代码,但当我尝试获取div的值时,它会发送一个错误。现在我有一个类似的问题,我正在尝试选择此页()的下拉列表(tipo de cambio)的一个选项,但我无法执行此操作,有一些方法可以执行此操作,这些控件是用JavaScription生成的,稍后将查看。现在吃晚饭的时候,你想用那新的一页做什么?就javascript在该页面上运行而言,您是正确的,因此您需要留出足够的时间让javascript消失。尝试不同的等待条件,例如微调器元素消失或另一个元素出现,或者节点列表的长度更长。。。。看看什么有效。。。。如果仍然无法让它工作,用你的代码发布一个新问题,并在这里删除该问题的链接。现在我有一个类似的问题,我正在尝试选择此页面()的下拉列表(tipo de cambio)的一个选项,但我做不到,有一些方法可以做到,这些控件是用JavaScription生成的,稍后将查看。现在吃晚饭的时候,你想用那新的一页做什么?就javascript在该页面上运行而言,您是正确的,因此您需要留出足够的时间让javascript消失。尝试不同的等待条件,例如微调器元素消失或另一个元素出现,或者节点列表的长度更长。。。。看看什么有效。。。。如果仍然无法让它工作,用你的代码发布一个新问题,并在这里删除问题的链接。
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