У меня есть блок кода, который сканирует веб-сайт бесконечной высоты (Like FACEBOOK)
.Запуск цикла синхронно в python
Сценарий Selenium Python запрашивает у страницы javascript страницу в нижней части страницы, чтобы загрузить страницу ниже. Но в итоге бывает, что цикл работает асинхронно, а ограничитель скорости веб-сайта блокирует скрипт.
Мне нужна страница, чтобы дождаться загрузки первой страницы, а затем продолжить, но я не смог этого сделать.
Следующее, что я пробовал до сих пор.
Код выглядит следующим образом:
while int(number_of_news) != int(len(news)) :
driver.execute_script("window.scrollTo(document.body.scrollHeight/2, document.body.scrollHeight);")
news = driver.find_elements_by_class_name("news-text")
print(len(news))
Выход нечто вроде
Что я интерпретировано как цикл выполняется несколько раз, когда значение 43, 63... and so on
.
Я также попытался сделать его рекурсивным, но результат все тот же. Рекурсивный код выглядит следующим образом:
def call_news(_driver, _news, _number_of_news):
_driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
_news = driver.find_elements_by_class_name("news-text")
print(len(_news))
if int(len(_news)) != int(number_of_news) :
call_news(_driver, _news, _number_of_news)
else :
return _news
Рассматривается любой вид наконечника.
После каждого свитка у вас есть некоторый элемент, на котором вы можете настроить ожидание, чтобы быть видимым после загрузки новых новостей. Например, текст команды для прокрутки большего или какого-либо уникального класса для последнего элемента новостей и т. Д. И т. Д. – Grasshopper
@Grasshopper Проблема в том, что при прокрутке у меня нет уникального имени класса/идентификатора. Все, что у меня есть, - это элементы определенного имени класса «news-text» –
Как насчет ожидания всех элементов с этим классом после каждого прокрутки? Не знаю о точном методе в python, но в java вы можете ждать видимости или наличия всех элементов для локатора. – Grasshopper