【问题标题】:VBA Excel get text inside HTMLObjectVBA Excel在HTMLObject中获取文本
【发布时间】:2014-11-24 22:02:25
【问题描述】:

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

中的公司名称

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>

这是我的代码,我只尝试让 a 标签开始,但我也无法让它工作

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

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

【问题讨论】:

  • 我想你没有给我们链接是因为它是一个受密码保护的部分,但是你能不能给这张桌子在网上的样子拍张照片?
  • document 中的 document.getElementById("matrix1_group0")... 需要其父级,例如 ie.document.getElementById("matrix1_group0")...

标签: excel vba internet-explorer getelementbyid getelementsbyclassname


【解决方案1】:

您需要在表格中指定元素位置。 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>

我们可以忽略文档的其余部分,因为表格元素有一个 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 故意让您难以从其中刮取数据以确保安全。

【讨论】:

  • 好吧,在阅读了 Cheezsteak 的回答后,我只是删除了我的答案,并建议您遵循他的方法。它更加灵活并且很好地解释了我之前所做的事情,最好将注意力集中在最佳答案上,而不是拥有两个相似的答案。 +1
  • 我收到“运行时错误 424,需要对象”有什么我想告诉你的吗?
  • @NiklasAndersson 首先确认文档没有改变它的结构。否则,请参阅 answer 关于等待元素加载后再尝试访问它们。
  • 我正在执行 Next Do While ie.busy: DoEvents: Loop While ie.ReadyState 4 DoEvents Wend 我在页面上获取了数据。只是数据不正确。它仍然卡在“设置矩阵=”
【解决方案2】:

仅使用您展示的 HTML,您可以使用 CSS 选择器来获得这些:

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

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

CSS 选择器:


VBA:

您可以使用.document.querySelector 方法检索第一个匹配项

Debug.Print ie.document.querySelector("a[href*='aProgramInfoApplyRead.action?programId']").innerText

【讨论】:

  • 你试过了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 2010-12-26
相关资源
最近更新 更多