2014-12-22 99 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! –