2014-12-22 90 views
2

我刮在工作中该页面时,它是后登录,但我会尽量说明情况一样好,我可以循环刮,直到数VBA的Excel Getelementby

我有一个网页,我想获得随机时间过后出现的数字(取决于我们的服务器,计算机等的统计数据)直到IE.readystat <> 4,但数字仍然不会一直出现,直到稍后这

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

有三件事情,我回去是:

1运行时错误:91

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

3 12403(该是我找数)

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

回答

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 <跨度>的那么你将会处于永久循环。有办法a)最终放弃或b)发送ie.Refresh作为另一次尝试。如果你将循环分成不同的代码行,你可以测试一下最终的超时时间。

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

+0

你是老板!谢谢,它发现有36个跨度直接创建,然后再有20个跨度,因此将26个跨度改为50个,我的工作方式就像是一场梦!我真的很喜欢这样解决的方式。我没有失败我的任何样品测试!谢谢@Jeeped! –