2014-12-22 2 views
2

Я выскабливание этой страницы на работе, это не после входа в системе, но я попытаюсь объяснить ситуацию, как хорошо, как я могуLoop соскоба до числа VBA Excel Getelementby

Я получил страницу, где я хочу получить число, которое появляется после того, как прошло какое-то время (в зависимости от статистики нашего сервера, компьютера и т. д.). Это не очищает, пока IE.readystat <> 4, но цифры все еще не всегда появляются, пока немного позже что

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

есть 3 вещи, которые я вернусь являются:

1 Run Time Error: 91

2 Текст "Loading ..."

3 12.403 (Номер, который я ищу)

мне было интересно, если есть кто-то там, что знаете, могу ли я зациклять соскабливание, пока я на самом деле не получу номер, а затем перейду к следующей задаче? Не останавливаясь на «Ошибка времени выполнения: 91» (Просто получите excel, чтобы игнорировать это сообщение.

ответ

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 <span>, тогда вы будете в цикле forever. Есть способы: a) в конце концов отказаться или b) отправить ie.Refresh для другой попытки. Если вы разделите цикл на отдельные строки кода, вы можете протестировать его с предельным временем ожидания.

Оценка .style.visible property of Загрузка ... текст другой способ. К сожалению, я не могу быть более конкретным, не видя хотя бы часть этого HTML-кода.

+0

Yeap, вы - босс! Спасибо, он выясняет, что есть 36 пролетов, которые создаются напрямую, а затем дополнительные 20, которые потом после этого меняют 26-50, и я работаю как сон !!!!! Мне очень нравится, как это было решено. Я не провалил ни одного из моих тестовых тестов! Спасибо, @ Jeep! –