VBA、MSXML2.XMLHTTP60 在头部解析

use*_*147 2 vba

我用它来获取网页

Dim xhr As MSXML2.XMLHTTP60
Set xhr = New MSXML2.XMLHTTP60

On Error Resume Next

With xhr

    .Open "GET", URL, False
    .send

    If .ReadyState = 4 And .Status = 200 Then
        Set doc = New MSHTML.HTMLDocument
        doc.body.innerHTML = .responseText

        htmlRequestHTTP = True
    Else
        MsgBox "Internet Error, please check:" & vbNewLine & "Ready state: " & .ReadyState & _
        vbNewLine & "HTTP request status: " & .Status
        htmlRequestHTTP = False
    End If

End With
Run Code Online (Sandbox Code Playgroud)

但是 doc.getElementsByTagName("META") 错过了 HEAD 部分的标签。现在 .response 已完成(我已检查),那么我如何访问 HEAD 元素?谢谢,

Tom*_*lak 5

不要写入文档正文。写入文档本身。

Set doc = New MSHTML.HTMLDocument
doc.write HttpGet(URL)
MsgBox doc.getElementsByTagName("META").length
Run Code Online (Sandbox Code Playgroud)

辅助功能HttpGet

Function HttpGet(url) As String
    With New MSXML2.XMLHTTP60
        .open "GET", url, False
        On Error Resume Next
        .send
        If .Status = 200 Then
            HttpGet = .responseText
        Else
            MsgBox "HTTP request status: " & .Status, , "HttpGet Error"
        End If
        On Error GoTo 0
    End With
End Function
Run Code Online (Sandbox Code Playgroud)

作为一般提示,不要使用On Error Resume Next 除了下一个语句。

理想情况下,将可能在专用函数中失败的语句包装起来,以将覆盖的代码区域保持在On Error Resume Next绝对最小,就像我所做的那样。

  • @Tomalak我在“doc.write”这一行遇到了错误 (2认同)