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

如何在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元素,但是如何pipe理查看查询的整个响应?

如上面Jeeped所述, getElementsByClassName方法在XML请求上不起作用。

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

 Set pontod = oHtml.getElementById("headerQuoteContainer").getElementsByTagName("span")(1) 

而不是这个:

 Set pontod = oHtml.getElementsByClassName("sectionQuote nasdaqChange")(0).getElementsByTagName("span")(1) 

从网页的HTML结构可以看出:

在这里输入图像说明

…您的价格不仅是类名为sectionQuotenasdaqChange的第一个div的第二个span元素,也是id为headerQuoteContainer的唯一对象的第二个span元素。

因此,从那里刮取将避免使用传统的getElementsByClassName ()的无效方法getElementsByClassName (这是一个有效的HTML方法,但是当HTML是XML响应时getElementById()