Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
VBA使用javaScript刮片-使用execScript有问题吗?_Javascript_Vba_Web Scraping - Fatal编程技术网

VBA使用javaScript刮片-使用execScript有问题吗?

VBA使用javaScript刮片-使用execScript有问题吗?,javascript,vba,web-scraping,Javascript,Vba,Web Scraping,我需要创建一个包含收益结果的表。我能够管理第一页,但我还需要填写包含所有以前收入的表格。 我不知道如何使用exeScript“单击”Mostrar Mas按钮,得到结果并继续这样做,直到表格完成 这是我到目前为止编写的代码 Sub fundamentals() 'Primer pagina de earnings Dim XMLReq As New MSXML2.XMLHTTP60 Dim HTMLDoc As New MSHTML.HTMLDocument Di

我需要创建一个包含收益结果的表。我能够管理第一页,但我还需要填写包含所有以前收入的表格。 我不知道如何使用exeScript“单击”Mostrar Mas按钮,得到结果并继续这样做,直到表格完成

这是我到目前为止编写的代码

Sub fundamentals()
    'Primer pagina de earnings
    Dim XMLReq As New MSXML2.XMLHTTP60
    Dim HTMLDoc As New MSHTML.HTMLDocument
    Dim TRs As MSHTML.IHTMLElementCollection
    
    Dim Table As MSHTML.IHTMLTable
    Dim Rows As MSHTML.IHTMLElementCollection
    Dim TD As MSHTML.IHTMLElement

    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Apple")
    
    XMLReq.Open "POST", "https://es.investing.com/equities/apple-computer-inc-earnings", False
    'XMLReq.Open "POST", "https://es.investing.com/equities/morehistory", False
    XMLReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    XMLReq.setRequestHeader "Accept", "text/plain"
    XMLReq.setRequestHeader "X-Requested-With", "XMLHttpRequest"
    
    XMLReq.send
    
    If XMLReq.Status <> 200 Then
        MsgBox "problem" & vbNewLine & XMLReq.Status & "- " & XMLReq.statusText
        Exit Sub
    End If
    
    
    HTMLDoc.body.innerHTML = XMLReq.responseText
    
    Set Table = HTMLDoc.getElementById("earningsHistory6408")
    Set Rows = Table.Rows
    Set TDs = Rows.tags("TR")
    
    i = 0: j = 8: k = 3
    For Each TD In TDs
        If i = 0 Then
            Headerarray = Split(TD.innerHTML, "<TH")
            ws.Cells(2, j) = Split(Split(Headerarray(1), ">")(1), "<")(0): j = j + 1                'Fecha de presentacion
            ws.Cells(2, j) = Split(Split(Headerarray(2), ">")(1), "<")(0): j = j + 1                'Período terminado
            ws.Cells(2, j) = Split(Split(Headerarray(3), ">")(1), "<")(0): j = j + 1                'BPA
            ws.Cells(2, j) = Split(Split(Split(Headerarray(4), ">")(1), ";")(2), "<")(0): j = j + 1 'Previsión
            ws.Cells(2, j) = Split(Split(Headerarray(5), ">")(1), "<")(0): j = j + 1                'Ingresos
            ws.Cells(2, j) = Split(Split(Split(Headerarray(6), ">")(1), ";")(2), "<")(0)            'Previsión
        Else
            TDarray = Split(TD.innerHTML, "<TD")
            ws.Cells(k, j) = Split(Split(TDarray(1), ">")(1), "<")(0): j = j + 1 'Fecha de publicacion
            ws.Cells(k, j) = Split(Split(TDarray(2), ">")(1), "<")(0): j = j + 1 'Periodo terminado
            ws.Cells(k, j) = Split(Split(TDarray(3), ">")(1), "<")(0): j = j + 1 'BPA
            ws.Cells(k, j) = Split(Split(TDarray(4), ";")(2), "<")(0): j = j + 1 'Prevision
            ws.Cells(k, j) = Split(Split(TDarray(5), ">")(1), "<")(0): j = j + 1 'Ingresos
            ws.Cells(k, j) = Split(Split(TDarray(6), ";")(2), "<")(0): j = j + 1 'Prevision
            
        End If
        i = i + 1: j = 8: k = k + 1
    Next
    
End Sub
子基础()
“收入入门”
Dim XMLReq作为新的MSXML2.XMLHTTP60
将HTMLDoc设置为新的MSHTML.HTMLDocument
Dim TRs作为MSHTML.IHTMLElementCollection
将表格设置为MSHTML.IHTMLTable
将行暗显为MSHTML.IHTMLElementCollection
将TD设置为MSHTML.IHTMLElement
将ws设置为工作表:设置ws=ThisWorkbook.Sheets(“苹果”)
XMLReq.Open“POST”https://es.investing.com/equities/apple-computer-inc-earnings”“错
'XMLReq.Open“POST”https://es.investing.com/equities/morehistory”“错
XMLReq.setRequestHeader“内容类型”、“应用程序/x-www-form-urlencoded”
XMLReq.setRequestHeader“接受”、“文本/普通”
XMLReq.setRequestHeader“X-request-With”,“XMLHttpRequest”
XMLReq.send
如果XMLReq.Status为200,则
MsgBox“问题”&vbNewLine&XMLReq.Status&“-”&XMLReq.statusText
出口接头
如果结束
HTMLDoc.body.innerHTML=XMLReq.responseText
Set Table=HTMLDoc.getElementById(“EarningHistory6408”)
设置行=表。行
设置TDs=Rows.tags(“TR”)
i=0:j=8:k=3
对于TDs中的每个TD
如果i=0,那么

Headerarray=Split(TD.innerHTML,“”(1),“”(1),“”(1),“”(1),“”(1),“”(2),“”(1),“”(1),“”(2),“请考虑你以前的问题的一些答案是否值得接受。您也没有在您的帖子中发送任何内容。这个问题几乎肯定有一个现成的答案,你可以用它来指导你。嗨,QHarr,我不是一个专家,所以,如果你看到我之前的问题回答了我的问题,我道歉。我的观点是,我收到的运行execScript的答案都不起作用。同样,在本例中,我使用的不是IE(正如前面的问题一样,它太慢了),而是XMLHTTP60。另外,我在问如何捕获脚本的结果,我真的不知道如何捕获它并在以后解析它。最后,关于不在我的帖子中发送任何东西,我也必须道歉,我不知道你的意思或我没有做什么。谢谢你,很抱歉给了我这么长的回答:)不用担心。如果之前的答案都不符合你的要求,那么你完全有理由不接受它们。如果打开开发工具(F12)的“网络”选项卡,然后单击Mostrar Mas,是否会在“网络”选项卡中看到生成的xhr(web流量)?页面可能正在请求其他信息以更新页面。该请求的详细信息将显示在该请求的网络选项卡中。嗨,QHarr,我已经更新了原始问题。我在“网络”选项卡中看到的信息正是我想要的,但我不知道是什么时候以及如何被请求的。这可能是一个javascript代码,我无法使其正常工作(如上面所示)。希望它能澄清我的疑问所在。