循环抓取,直到数字VBA Excel Getelementby

时间:2014-12-22 12:45:48

标签: excel excel-vba getelementsbytagname vba

我在工作时正在抓这个页面,这是在登录后但是我会尝试尽可能好地解释这个情况

我有一个页面,我希望得到一个随机时间过后出现的数字(取决于我们的服务器,计算机等的统计数据)它不会刮到IE.readystat<>但是数字仍然不会总是出现,直到稍后那个

Sent = ie.document.getElementsByTagName("span")(25).innertext
Sheet4.Range("D" & i).Value = Sent

我得到的有三件事是:

1运行时错误:91

2文本“正在加载......”

3 12,403(我要找的号码)

我想知道是否有人在那里知道我是否可以循环抓取,直到我实际得到一个数字然后继续下一个任务?没有停在“运行时错误:91”(只是得到excel忽略该消息。

1 个答案:

答案 0 :(得分:2)

动态JSON(或其他)内容确实会导致检索网页,因为ie.Busyie.ReadyState似乎已完成网页投放但所需内容尚未到达。我一直在与其中一个网站进行一场失败的战斗,现在已经有一段时间了,网页设计师将专业能力设置得相当低,这无济于事。这是我目前正在使用的内容,大致翻译为您的目的。

 Dim url as String
 url = "https://www.mydomain.com"
 ie.Navigate2 url, (navNoHistory + navNoReadFromCache + navNoWriteToCache)  ' &H2 + &H4 + &H8
 Do While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE: DoEvents: Loop   ' READYSTATE_COMPLETE is 4
 Do While ie.Document.getElementsByTagName("span").length < 26: DoEvents: Loop
 Sent = ie.document.getElementsByTagName("span")(25).innertext
 Sheet4.Range("D" & i).Value = Sent

您正在寻找第26个<span>元素,因此如果页面永远不会发送至少26&lt; span&gt;,那么您将处于永久循环中。有办法a)最终放弃或b)发送ie.Refresh进行另一次尝试。如果将循环分解为单独的代码行,则可以测试最终超时。

测试 Loading ... 文本的.style.visible属性是另一种方法。不幸的是,如果没有看到HTML代码的至少一部分,我就无法更具体。