VBA从HTML获取号码

目的是从这个网站提取XBT / USD最后的价值: https ://www.kraken.com/charts我从另一个问题得到这个代码,并试图编辑它的需要没有成功。

Option Explicit Sub Get_Number() 'Open website Dim IE As New SHDocVw.InternetExplorer IE.Visible = True IE.Navigate "https://www.kraken.com/charts" Do While IE.ReadyState <> READYSTATE_COMPLETE Loop 'Clicl on XBT/USD in order to change the value from EUR to USD IE.Document.getElementById("pairselect-button").Click IE.Document.getElementsByClassName("currpairs")(1).Click 'Extract USD last value Dim kfc As Integer Dim oHTML_Element As IHTMLElement For Each oHTML_Element In IE.Document.getElementsByTagName("div") If oHTML_Element.className = "val.mono" Then kfc = oHTML_Element.Value End If Next Range("A2").Value = kfc End Sub 

根据检查元素的HTML代码

 <div class="val mono" data-val="2324.999" name="last" style="color: rgb(0, 178, 86);">$2,738.5<span class="deczeros">00</span></div> 

在此之后,我得到了A2 $ 2,738.5的价格

在此先感谢您的宝贵帮助。

你得到0的主要原因是kfc从未等于0以外的任何东西。我把val.mono改成了val mono,我把variablestypes改成string而不是整数。 下面的代码以最好的方式我知道如何与后期绑定。

 Sub Get_Number() 'Open website Dim IE As Object Dim event_created As Object Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.navigate "https://www.kraken.com/charts" Do While IE.readyState <> 4 Application.Wait TimeValue("00:00:01") Loop Application.Wait TimeValue("00:00:01") 'Clicl on XBT/USD in order to change the value from EUR to USD Set event_created = IE.document.createEvent("HTMLEvents") event_created.initEvent "click", True, False DoEvents IE.document.getElementById("pairselect-button").dispatchEvent event_created IE.document.getElementsByClassName("currpairs")(1).dispatchEvent event_created 'Extract USD last value Dim kfc As String Dim oHTML_Element As Object Dim divs As Object Set divs = IE.document.getElementsByTagName("div") For Each oHTML_Element In divs If oHTML_Element.className = "val mono" Then kfc = oHTML_Element.textContent End If Next Range("A2").Value = kfc End Sub 

而不是从HTML中提取,该网站有一个API访问应该更快的工作。

请注意,我在下面的代码中使用了早期绑定,但是如果需要的话,您可以随时将其切换为迟到绑定。

另外,我select了交易的最后交易和交易时间(UTC时间)。 我用正则expression式来提取这些。

还有其他的公共API调用,你可以使用。 例如,如果您只对最后一笔交易的价格感兴趣,而不是时间,则可以获取股票信息。

有关更多信息,请参阅Kraken API帮助页面 。

结果写入A1B1 ,但可以设置一个例程,将结果顺序写入后续行。

也许是这样的:

 Option Explicit Sub LastTrade() 'Microsoft Windows HTTP Services 5.1 'Microsoft VBScript Regular Expressions 5.5 Dim httpRequest As WinHttpRequest Dim sResponse As String Dim sInfo As String Dim RE As RegExp, MC As MatchCollection Dim D As Double Const sUrl As String = "https://api.kraken.com/0/public/Trades" sInfo = "?pair=XBTUSD" Set httpRequest = New WinHttpRequest httpRequest.Open "Get", sUrl & sInfo httpRequest.Send httpRequest.WaitForResponse sResponse = httpRequest.ResponseText Set RE = New RegExp With RE .Global = False .IgnoreCase = False .Pattern = "\[""(\d+\.\d+)"",[^,]+,(\d+\.\d+)[^]]+]],""last""" If .Test(sResponse) = True Then Set MC = .Execute(sResponse) [a1].NumberFormat = "$#,###.000" [a1] = MC(0).SubMatches(0) D = MC(0).SubMatches(1) 'Unix time D = D / 86400 + CDbl(#1/1/1970#) With [b1] .NumberFormat = "dd-mmm-yyyy hh:mm:ss" .Value = D End With Else [a1] = Right(sResponse, 100) End If End With Set httpRequest = Nothing End Sub 

我发现这个代码有点慢,但工作。 此外,我发现价值是给予加权AVG,然后我改正了最后更改“ getElementsByTagName("div") ”由“ getElementsByName("last") ”,并纠正与您的stringbuild议和工作innertext如下:

 Option Explicit Sub Get_Number1() 'Open website Dim IE As New SHDocVw.InternetExplorer IE.Visible = True IE.Navigate "https://www.kraken.com/charts" Do While IE.ReadyState <> READYSTATE_COMPLETE Loop 'Click on XBT/USD in order to change the value from EUR to USD IE.Document.getElementById("pairselect-button").Click IE.Document.getElementsByClassName("currpairs")(1).Click ''Extract USD last value Dim kfc As String Dim oHTML_Element As IHTMLElement For Each oHTML_Element In IE.Document.getElementsByName("last") If oHTML_Element.className = "val mono" Then kfc = oHTML_Element.innerText End If Next Debug.Print kfc End Sub 

非常感谢