我正在尝试在excel单元格的id下拉取数据拉取内部文本。
这是针对XML代码的。
Sub getelementbyid()
Dim XMLpage As New MSXML2.XMLHTTP60
Dim hdoc As New MSHTML.HTMLDocument
Dim HBEs As MSHTML.IHTMLElementCollection
Dim HBE As MSHTML.IHTMLElement
Dim ha As String
XMLpage.Open "GET","https://www.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuote.jsp?symbol=HAL", False
XMLpage.send
hdoc.body.innerHTML = XMLpage.responseText
ha = hdoc.getelementbyid("open").innerText
Range("K11").Value = ha
Debug.Print ha
End Sub
我期望输出值,但它显示--。
发布于 2019-06-19 08:52:03
检查响应文本。在浏览器中呈现页面的方式与在ResponseText中返回的方式有所不同。
我将网址放入浏览器,进入开发工具(F12),找到该元素,并记下该元素中的数值。
然后,我将在VBA中获得的响应文本转储到一个单元格中,并将整个单元格值复制到Notepad++中。如果这样做,您将看到#open元素中的初始值确实是"--“。
真正的价值似乎是通过JavaScript写入超文本标记语言,这是常见的做法。在页面的顶部有一个JSON对象,可能是根据您的请求从网站后端注入到文档中的。
因此,您必须解析JSON,而不是HTML。我已经提供了做这件事的代码。现在,可能有一种更好的方法来做这件事,我觉得这段代码有点"hacky“,但它完成了你的示例URL的工作。
Sub getelementbyid()
Dim XMLpage As New MSXML2.XMLHTTP60
Dim hdoc As New MSHTML.HTMLDocument
Dim HBEs As MSHTML.IHTMLElementCollection
Dim HBE As MSHTML.IHTMLElement
Dim ha As String
XMLpage.Open "GET", "https://www.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuote.jsp?symbol=HAL", False
XMLpage.send
'// sample: ,"open":"681.05",
Dim token As String
token = """open"":"""
Dim startPosition As Integer
startPosition = InStr(1, XMLpage.responseText, token)
Dim endPosition As Integer
endPosition = InStr(startPosition, XMLpage.responseText, ",")
Dim prop As String
prop = Mid(XMLpage.responseText, startPosition, endPosition - startPosition)
prop = Replace(prop, """", vbNullString)
prop = Replace(prop, "open:", vbNullString)
Dim val As Double
val = CDbl(prop)
ha = val
Range("K11").Value = ha
Debug.Print ha
End Sub
https://stackoverflow.com/questions/56657806
复制相似问题