如何在Excel中输出WinHTTPRequest的结果?
例如,以下代码从网页中查询Apple的股票报价,但它没有输出任何内容:
Sub GetQuotes()
Dim XMLHTTP As Object, html As Object, pontod As Object
On Error Resume Next
Set oHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
.Open "GET", "http://www.reuters.com/finance/stocks/overview?symbol=AAPL.O", False
.send
oHtml.body.innerHTML = .responseText
End With
'Price
Set pontod = oHtml.getElementsByClassName("sectionQuote nasdaqChange")(0).getElementsByTagName("span")(1)
MsgBox pontod.innerText
End Sub虽然这对于名称来说是完美的:
Sub GetQuotes2()
Dim XMLHTTP As Object, html As Object, pontod As Object
On Error Resume Next
Set oHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
.Open "GET", "http://www.reuters.com/finance/stocks/overview?symbol=AAPL.O", False
.send
oHtml.body.innerHTML = .responseText
End With
'Name
Set pontod = oHtml.getElementById("sectionTitle").getElementsByTagName("h1")(0)
MsgBox pontod.innerText
End Sub我希望能够获取整个页面并在其中查找特定的HTML元素,但是如何从查询中看到整个响应呢?
发布于 2016-01-07 21:40:53
如前所述,getElementsByClassName方法不适用于XML请求。
然而,通过查看您想要抓取的网页,您可以通过使用下面一行来解决这个问题:
Set pontod = oHtml.getElementById("headerQuoteContainer").getElementsByTagName("span")(1)而不是这个:
Set pontod = oHtml.getElementsByClassName("sectionQuote nasdaqChange")(0).getElementsByTagName("span")(1)您可以从网页的HTML结构中观察到:

..。您的价格不仅是具有类名sectionQuote和nasdaqChange的第一个div的第二个span元素,也是具有id headerQuoteContainer的唯一对象的第二个span元素。
因此,对经典的getElementsByClassName使用无效的方法getElementById() (这是一个有效的getElementById()方法,但不是当HTML是XML时),从那里刮掉它将避免使用无效的方法。
https://stackoverflow.com/questions/34663611
复制相似问题