Excel VBA:是否在Excel中输出WinHTTPRequest的结果?

Excel VBA:是否在Excel中输出WinHTTPRequest的结果?,vba,excel,Vba,Excel,如何在Excel中输出WinHTTPRequest的结果 例如,以下代码从网页查询苹果的股票报价,但它不输出任何内容: 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"

如何在Excel中输出
WinHTTPRequest
的结果

例如,以下代码从网页查询苹果的股票报价,但它不输出任何内容:

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元素,但如何从查询中查看整个响应?

正如Jeeped上面所说,方法
getElementsByClassName
对XML请求不起作用

但是,通过查看您试图刮取的网页,您可以使用以下行解决此问题:

Set pontod = oHtml.getElementById("headerQuoteContainer").getElementsByTagName("span")(1)
而不是这个:

Set pontod = oHtml.getElementsByClassName("sectionQuote nasdaqChange")(0).getElementsByTagName("span")(1)
从网页的HTML结构可以看出:

。。。您的价格不仅是第一个
div
的第二个
span
元素,其类名为
sectionQuote
nasdaqChange
,而且是id为
headerQuoteContainer
的唯一对象的第二个
span
元素


因此,从那里刮取它可以避免对经典的
getElementById()
使用无效的方法
getElementsByClassName
(这是一个有效的HTML方法,但在HTML是XML响应时不是)

看。@Jeeped谢谢,我知道了。getElementById正在工作,而GetElementsByCassName没有。但是我仍然不在那里(我已经读了你提到的帖子)fwiw,在开发xmlHTTP请求时,我在浏览器中使用fiddler,该浏览器导航到我发送请求的同一页面。如果您仍然需要查看整个页面,几乎任何浏览器中的Ctrl+U都会显示背景HTML。可能打开一个快速文件对象或ado.stream并将.responseText写入TXT或HTML。在第一个示例中,尝试将声明
HTML作为对象
替换为
ohtml作为HTMLDocument
,并删除“出错时继续下一步”行谢谢,这是正确的。它不适用于getElementsByClassName。如果创建了一个对象浏览器来导航到所需的页面,而不是winhttprequest浏览器,那么它确实可以工作。