循环刮,直到数字VBA Excel Getelementby

我在工作中抓取这个页面,这是在login后,但我会尽我所能地解释情况

我有一个页面,我想要得到的数字出现后,随机时间已经过去了(取决于我们的服务器,计算机等的统计)它不是刮到IE.readystat <> 4,但数字仍然不总是出现,直到稍晚一点

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

有三件事我回来是:

1运行时间错误:91

2文本“正在加载…”

3 12,403(我正在寻找的号码)

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

由于ie.Busyie.ReadyState似乎已经完成了页面交付,但是所期望的内容还没有到达,所以dynamicJSON(或其他)内容可能真的弄脏了检索网页。 我一直在与其中一个站点打一场关于一场失败的战斗,现在有一段时间了,这对网页devise师的专业能力设置很低没有帮助。 这是我目前使用的,大致翻译为您的目的。

  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 

你正在寻找第二十六<span>元素,所以如果页面永远不会发送至less26 <span>,那么你将永远循环。 有办法a)最终放弃或b)发送一个ie.Refresh再次尝试。 如果你把循环分成不同的代码行,你可以testing一下最终的时间。

正在testingLoading …文本的.style.visible属性是另一种方法。 不幸的是,如果没有看到至less一部分HTML代码,我不能更具体。