【问题标题】:Query div element by class name using Excel VBA使用 Excel VBA 按类名查询 div 元素
【发布时间】:2013-11-21 19:14:59
【问题描述】:

我正在尝试将数据保存到具有特定类名的 div 元素的 Excel 中,例如:

<div class="myClass">
   <span>Text1</span>
   <span>Text2</span>
</div>

我的 VBA 代码:

Sub GetData()
Dim oHtml       As HTMLDocument
Dim oElement    As Object

Set oHtml = New HTMLDocument

With CreateObject("WINHTTP.WinHTTPRequest.5.1")
    .Open "GET", "http://www.example.com/", False
    .send
    oHtml.body.innerHTML = .responseText
End With

For Each oElement In oHtml.getElementsByClassName("myClass")
    Debug.Print oElement.Children(0).src
Next oElement
End Sub

这是返回错误: 运行时错误:“438”:对象不支持此属性或方法。错误在线Debug.Print ...

我已激活以下推荐人: Microsoft HTML 对象库 微软互联网控制

我希望能够选择第一个或第二个跨度上的文本并将其粘贴到单元格上,我该怎么做?

【问题讨论】:

  • 参考这个link
  • @Santosh 我的问题有所不同,但我设法在您的链接的帮助下找到了解决方案!
  • @NunoNogueira 不要让我们悬而未决,那是什么?
  • @safetyOtter 在下面看到我的回答,希望对您有所帮助

标签: vba excel


【解决方案1】:

这对我有用:

Dim oHtml As HTMLDocument
Dim oElement As Object

Set oHtml = New HTMLDocument

With CreateObject("WINHTTP.WinHTTPRequest.5.1")
    .Open "GET", "http://www.example.com", False
    .send
    oHtml.body.innerHTML = .responseText
End With

Set dados = oHtml.getElementsByClassName("myClass")(0).getElementsByTagName("span")

i = 0
For Each oElement In dados
    Sheets("Sheet1").Range("A" & i + 1) = dados(i).innerText
    i = i + 1
Next oElement

【讨论】:

    【解决方案2】:

    这是我过去的做法:

    Set oElement = oHtml.getElementsByClassName("myClass")
    i = 0
    While i < oElement.Length
        Debug.Print oElement(i).innerText
      i = i + 1
    Wend
    

    你可能想要 innerHtml 代替?

    【讨论】:

    • innerHTML 是个好主意。 oElement.Length 返回错误:运行时错误 439。Objecto 不支持此属性或方法
    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 2021-04-27
    • 2014-02-15
    • 1970-01-01
    • 2021-03-05
    • 2023-01-03
    • 2012-01-20
    相关资源
    最近更新 更多