【问题标题】:Get data from a web table with table tag从带有表格标签的 Web 表格中获取数据
【发布时间】:2015-11-14 15:13:00
【问题描述】:

我在 HTML 中有这段代码:

<table cellspacing = "0" cellpadding = "0" width = "100%" border="0">
<td class="TOlinha2"><span id="Co">140200586125</span>

我已经有一个访问网站、登录并转到正确页面的 VBA 函数。现在我正在尝试在 HTML 表格中获取td 标签。我想要的值是140200586125,但我想要很多td 标签,所以我打算使用for 循环来获取那些tds 并将它们放入工作表中。

我都试过了:

.document.getElementByClass()

和:

.document.getElementyById()

但都没有用。

感谢您的帮助。我来自巴西,对于任何英语错误非常抱歉。

【问题讨论】:

  • 能否提供网址以便我们测试我们的解决方案?
  • 对不起,这是我工作的私人网站,现在我在大学,唯一能做的就是明天发布更多的代码,如果有帮助的话。
  • 如果您尝试过.document.getElementById(我假设getElementy 中多余的y.document.getElementById("Co").InnerText?当我们看不到您的实际代码和您尝试抓取的页面时,很难提供帮助。
  • 我没试过,但我会的。如果明天之前我没有得到答案,我将发布所有代码,对不起,但现在我没有它。不过谢谢你的帮助。

标签: html vba web tags html-table


【解决方案1】:

没有足够的 HTML 来确定 TOlinha2 是否是感兴趣表中所有 td 的一致类名;并且仅限于此表。如果是,那么您确实可以使用.querySelectorAll

你可以使用CSS selector:

ie.document.querySelectorAll(".TOlinha2")

"." 代表类名。

不能使用For Each Loop 迭代返回的NodeList。请参阅我的问题Excel crashes when attempting to inspect DispStaticNodeList。 Excel 将崩溃,您将丢失所有未保存的数据。

你必须循环 nodeList 的长度,例如

Dim i As Long
For i = 0 To Len(nodeList) -1
    Debug.Print nodeList(i).innerText    
Next i

有时您需要不同的语法:

Debug.Print nodeList.Item(i).innerText 

您可以尝试使用更多限定元素进一步缩小此 CSS 选择器的范围,例如,该元素必须在 tbody 内,即 table,并且前面有 tr(表格行)并且类名 .TOLinha2

ie.document.querySelectorAll("tbody tr .TOlinha2")

【讨论】:

    【解决方案2】:

    由于您提到您需要检索多个 &lt;td&gt; 标签,因此检索整个集合比使用 getElementById() 一次获取一个标签更有意义。

    根据上面的 HTML,这会将 &lt;td&gt; 中的所有 &lt;span&gt; 节点与 class='TOlinha2' 匹配:

    Dim node, nodeList
    Set nodeList = ie.document.querySelectorAll("td.TOlinha2 > span")
    
    For Each node In nodeList
        MsgBox node.innerText     ' This should return the text within the <span>
    Next
    

    【讨论】:

      猜你喜欢
      • 2022-11-05
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      相关资源
      最近更新 更多