VBA Excel在HTMLObject中获取文本

时间:2014-11-24 22:02:26

标签: excel vba internet-explorer getelementbyid getelementsbyclassname

我知道这对你们中的一些人来说真的很容易。但我一直在互联网深处,我找不到答案。我需要获取

中的公司名称

tbody tr td a eBay-tradera.com

td class="bS aR" 970,80

/td /tr /tbody

<tbody id="matrix1_group0">
<tr class="oR" onmouseover="onMouseOver(this, false)" onmouseout="onMouseOut(this, false)" onclick="onClick(this, false)">
<td class="bS">&nbsp;</td>
<td>
<a href="aProgramInfoApplyRead.action?programId=175&amp;affiliateId=2014848" title="http://www.tradera.com/" target="_blank">

   eBay-Tradera.com

</a>
</td>
<td class="aR">
<a href="/pan/aProgramInfoApplyRead.action?programId=175&amp;affiliateId=2014848" title="/pan/aProgramInfoApplyRead.action?programId=175&amp;affiliateId=2014848">175</a></td>
<td class="bS aR">0</td><td class="bS aR">0</td><td class="bS aR">187</td>
<td class="aR">0,00%</td><td class="bS aR">124</td>
<td class="aR">0,00%</td>
<td class="bS aR">26</td>
<td class="aR">20,97%</td>
<td class="bS aR">32</td>
<td class="aR">60,80</td>
<td class="aR">25,81%</td>
<td class="bS aR">5&nbsp;102,00</td>
<td class="bS aR">0,00</td>
<td class="aR">0,00</td>
<td class="bS aR">

   970,80

</td>
</tr>
</tbody>

这是我的代码,我只是试着让一个标签开始,但我不能让它工作

Set TDelements = document.getElementById("matrix1_group0").document.getElementsbytagname("a").innerHTML
r = 0
C = 0

For Each TDelement In TDelements
Blad1.Range("A1").Offset(r, C).Value = TDelement.innerText
r = r + 1
Next

事先感谢我知道这可能很简单。但我希望其他人也可能有同样的问题,这对他们也有帮助。 &#34; r = r + 1&#34;是因为这个名单上还有更多的公司。我只是想让它变得尽可能简单。再次感谢!

2 个答案:

答案 0 :(得分:2)

您需要在表格中指定元素位置。 Ebay似乎混淆了类名,所以我们不能依赖那些一致的。我通常也不会依赖于它们的表索引是一致的元素,但我没有看到任何解决方法。

我假设这是您正在搜索的HTML文档

<tbody id="matrix1_group0">
  <tr class="oR" onmouseover="onMouseOver(this, false)" onmouseout="onMouseOut(this, false)" onclick="onClick(this, false)">
    <td class="bS">&nbsp;</td>
    <td>
      <a href="aProgramInfoApplyRead.action?programId=175&amp;affiliateId=2014848" title="http://www.tradera.com/" target="_blank">
        eBay-Tradera.com  <!-- <=== You want this? -->
      </a>
    </td>
    <!-- ... -->
  </tr>
  <!-- ... -->
</tbody>

我们可以忽略文档的其余部分,因为table元素有一个ID。简而言之,我们假设

.getElementById("matrix1_group0").getElementsByTagName("TR")

将返回按其外观排序的html行对象的集合。

Set matrix = document.getElementById("matrix1_group0")
Set firstRow = matrix.getElementsByTagName("TR")(1)
Set firstRowSecondCell = firstRow.getElementsByTagName("TD")(2)
traderaName = firstRowSecondCell.innerText

当然你可以将这一切内联为

document.getElementById("matrix1_group0").getElementsByTagName("TR")(1).getElementsByTagName("TD")(2).innerText

但这会使调试变得更难。此外,如果网页以不同的格式呈现给您,那么这将无效。为了安全起见,Ebay故意让你很难从中获取数据。

答案 1 :(得分:1)

仅显示了HTML,您可以使用CSS选择器来获取这些内容:

a[href*='aProgramInfoApplyRead.action?programId']

哪个说a标签具有属性href,其中包含字符串'aProgramInfoApplyRead.action?programId'。这匹配两个元素,但是第一个是您想要的元素。

CSS选择器:

CSS selector


VBA:

您可以使用.querySelector的{​​{1}}方法来检索第一个匹配项

.document