我在工作时正在抓这个页面,这是在登录后但是我会尝试尽可能好地解释这个情况
我有一个页面,我希望得到一个随机时间过后出现的数字(取决于我们的服务器,计算机等的统计数据)它不会刮到IE.readystat<>但是数字仍然不会总是出现,直到稍后那个
Sent = ie.document.getElementsByTagName("span")(25).innertext
Sheet4.Range("D" & i).Value = Sent
我得到的有三件事是:
1运行时错误:91
2文本“正在加载......”
3 12,403(我要找的号码)
我想知道是否有人在那里知道我是否可以循环抓取,直到我实际得到一个数字然后继续下一个任务?没有停在“运行时错误:91”(只是得到excel忽略该消息。
答案 0 :(得分:2)
动态JSON(或其他)内容确实会导致检索网页,因为ie.Busy
和ie.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代码的至少一部分,我就无法更具体。