【问题标题】:Vba create collection with HTML elementsVba 使用 HTML 元素创建集合
【发布时间】:2016-12-24 09:15:51
【问题描述】:

我正在尝试使用 VBA 捕获网络数据。

我有这样的 HTML 行:

<div class="table-wrapper">
  <table class="mega-table">
    <thead>
       <tr>…</tr>
    </thead>
    <tbody>
       <tr>…</tr>
       <tr>…</tr>
       <tr>…</tr>
       <tr>…</tr>
    </tbody>
  </table>
</div>

如何为“tbody”创建集合? (稍后我想遍历它包含的所有元素(所有“tr”)。

【问题讨论】:

  • 我一直在尝试使用 .getElementsBy...但正如这里提到的:stackoverflow.com/questions/15191847/… |在 vba 中我们不能写: Document.getElementById("target").getElementsByTagName("tr").

标签: html vba collections elements


【解决方案1】:

您可以使用 CSS 选择器:

browser.document.querySelectorAll(".mega-table tbody tr")

这将返回一个 nodeList 而不是“集合”;但你仍然可以循环它的长度。

它说在 mega-table 的类名 (".") 的元素中选择 tbody 标签内的 tr 标签。

【讨论】:

    【解决方案2】:

    这应该适用于您所追求的。基本上,您要选择包含该表的元素,然后选择该表的所有 TR。

    更新为包括选择表格主体。

     dim Elements as Object
    
     Set Elements = Browser.Document.getElementsByClassName("mega-table")(0).getElementsByTag‌​Name("tbody")‌(0).getElementsByTag‌​Name("tr")‌
    

    【讨论】:

    • 我会调试,但我不认为这是正确的,因为这个脚本也会捕获“thead”下的“tr”,我说我只想要那些在“tbody”下的脚本
    【解决方案3】:
    Sub IE()
    
    '   Internet Controls Libraray
    '   Microsoft HTML Controls Library
    
    Dim I As SHDocVw.InternetExplorer
    Dim D As HTMLDocument
    Dim C As MSHTML.IHTMLElementCollection
    Set I = New SHDocVw.InternetExplorer
    
    I.Visible = True
    
    I.Navigate ("http://www.stackoverflow.com")
    
    While I.Busy Or I.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Wend
    
    Set D = I.Document
    
    Set C = D.getElementsByTagName("TR")
    
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-28
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2020-02-21
      • 1970-01-01
      相关资源
      最近更新 更多