Как начать парсинг после загрузки веб-страницы в VBA - PullRequest
0 голосов
/ 09 июля 2020

Я создал веб-скребок на VBA, который хорошо справляется со сборкой данных. Однако, когда я go загружаю страницу, на странице возникает задержка, и на веб-странице отображается сообщение «Поиск ...». Появляется анимация, и в некоторых анимациях или изображениях на веб-странице происходит движение по часовой стрелке. Примерно через 4–5 секунд страница наконец загружается.

Я реализовал некоторый код, который должен был ждать завершения загрузки страницы, но различные свойства объекта SHDocVw.InternetExplorer не ожидают страница до финиша sh загрузка. Вместо этого мой исходный код продолжает выполняться, пока страница загружается. Это проблема c, потому что оставшаяся часть моего исходного кода будет пытаться вызывать различные объекты в DOM, вставлять текст, вызывать методы на странице, которая еще не завершила загрузку. Естественно, когда он это делает, код взрывается, выдается ошибка, и очистка не может продолжаться. Мой единственный обходной путь - это строка кода, которая вставляет искусственное время ожидания: Application.Wait Now + TimeValue ("00:00:11"). Здесь я жду 11 секунд.

Кажется, что свойство READYSTATE_COMPLETE не изменилось до или после загрузки. Строка кода debug.print продолжается и выводит код в непосредственное окно, даже если страница еще не загружена.

Возможно, есть еще одно свойство веб-страницы, которое мне нужно вызвать, чтобы гарантировать что страница загрузилась? Если да, то что это может быть за собственность? Какую библиотеку мне нужно открыть, чтобы найти это свойство?

Спасибо, ниже приведен код тестера:

 Do While IE.readyState <> READYSTATE_LOADING
        'Do Nothing and Wait for IE to load the page
        DoEvents
    Loop
    
'This line of code will run even though the webpage hasn't finished loading:
'The READYSTATE_COMPLETE property doesn't seem to work either.
    Debug.Print IE.LocationName, IE.LocationURL
    
'    Do While IE.readyState <> READYSTATE_COMPLETE
'        Do While IE.readyState <> READYSTATE_INTERACTIVE
'        Do While IE.readyState <> READYSTATE_LOADED
'        Do While IE.readyState <> READYSTATE_LOADING
'        Do While IE.readyState <> READYSTATE_UNINITIALIZED
'        Do While IE.readyState <> READYSTATE_COMPLETE
        Application.Wait Now + TimeValue("00:00:11")
        'DoEvents
'    Loop
...