VBA使用javaScript刮片-使用execScript有问题吗?
我需要创建一个包含收益结果的表。我能够管理第一页,但我还需要填写包含所有以前收入的表格。 我不知道如何使用exeScript“单击”Mostrar Mas按钮,得到结果并继续这样做,直到表格完成 这是我到目前为止编写的代码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
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代码,我无法使其正常工作(如上面所示)。希望它能澄清我的疑问所在。