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认同)