从带有表标记的Web表中获取数据

时间:2015-08-20 20:05:41

标签: html vba web tags html-table

我在HTML中使用此代码:

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

我已经拥有访问网站的VBA功能,登录并转到右侧页面。现在,我尝试在HTML中的表格中使用td标记。我想要的值是140200586125,但是我想要很多td个标签,所以我打算使用for循环来获取这些td并将它们放在工作表中。

我试过了两个:

.document.getElementByClass()

.document.getElementyById()

但都没有奏效。

感谢帮助。我来自巴西,对于任何英语错误都很抱歉。

2 个答案:

答案 0 :(得分:1)

由于您提到需要检索多个<td>标记,因此检索整个集合更有意义,而不是使用getElementById()一次一个地获取它们。

根据您的上述HTML,这会将<span>中的所有<td>个节点与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

答案 1 :(得分:1)

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

您可以使用CSS selector

ie.document.querySelectorAll(".TOlinha2")

"."代表className。

无法使用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")