Нет особой причины. Сколько раз интервалы ожидания действительно зависят от целевого сайта. Вы можете установить время ожидания на 1 секунду и увеличить максимальный счет на основе вашего опыта. Так как вы хотите получить только текст, вы можете настроить браузер так, чтобы отключить загрузку мультимедиа (фотографии и видеоролики) с блокировкой рекламы, даже разрешить запуск сценария только в основном домене (сторонние сценарии отключены).
исал скрипт на vba в сочетании с селеном для анализа всех названий компаний, доступных на веб-странице. На веб-странице активирован метод отложенной загрузки, поэтому в каждом свитке отображается только 20 ссылок. Если я прокручиваю 2 раза, то количество видимых ссылок равно 40 и так далее. На этой веб-странице доступно 1000 ссылок. Мой скрипт ниже может достигнуть нижней части этой страницы, обрабатывая всю прокрутку и извлекая все имена, доступные на этой веб-странице.
Однако после каждой прокрутки необходимо подождать некоторое время, пока эта веб-страница обновит содержимое. Это где я использовалhardcoded delay
но процесс жесткого кодирования очень противоречив, и иногда он заставляет браузер завершать работу до завершения всей операции.
Как я могу изменить эту часть.Wait 6000
чтобы сделать этоExplicit Wait
вместоHardcoded Wait
.
Это то, что я написал до сих пор:
Sub Getlinks()
Dim driver As New ChromeDriver, prevlen&, curlen&
Dim posts As Object, post As Object
With driver
.get "http://fortune.com/fortune500/list/"
prevlen = .FindElementsByClass("company-title").Count
Do
prevlen = curlen
.ExecuteScript ("window.scrollTo(0, document.body.scrollHeight);")
.Wait 6000 ''I like to kick out this hardcoded delay and use explicit wait in place
Set posts = .FindElementsByClass("company-title")
curlen = posts.Count
If prevlen = curlen Then Exit Do
Loop
For Each post In posts
R = R + 1: Cells(R, 1) = post.Text
Next post
End With
End Sub