@dancer_and_programer

Как замедлить процесс парсинга на SELENIUM?

Всем добрый день. Подскажите пожалуйста, есть парсер на Python, с помощью selenium (webdriver) парсит сайт яндекс месенджер (он на JS): https://yandex.ru/chat/#/chat
а именно популярные каналы. Он кликает на каждый канал и прокручивает вверх ( до самого начала до надписи КАНАЛ СОЗДАН), чтобы посчитать количество публикаций и суммарное количество просмотров под всеми публикациями. Но так как он слишком быстро прокручивает (с помощью этой строки:
for i in range(200):
    driver.execute_script("var evt = document.createEvent('MouseEvents');evt.initEvent('wheel', true, true);evt.deltaY = -100000;document.querySelector('.yamb-conversation__content').dispatchEvent(evt);")
    html2 = driver.page_source
    soup2 = BeautifulSoup(html2, 'lxml')
    time.sleep(2) # после одного прокрута (это 5-6 публикаций) сделать паузу 2 секунды, но такой способ не помогает

То он не все публикации успевает загрузить (т.к. JS не успевает загрузиться). Подскажите, как можно замедлить, а может есть другой способ, чтоб дождаться загрузки js на странице?
  • Вопрос задан
  • 269 просмотров
Пригласить эксперта
Ответы на вопрос 1
LazyTalent
@LazyTalent
Data Engineer, Freelancer
Лучше сделать так:
for i in range(200):
    driver.execute_script("var evt = document.createEvent('MouseEvents');evt.initEvent('wheel', true, true);evt.deltaY = -100000;document.querySelector('.yamb-conversation__content').dispatchEvent(evt);")
    time.sleep(2)
    html2 = driver.page_source
    soup2 = BeautifulSoup(html2, 'lxml')

В твоём варианте ты выполняешь прокрутку, считываешь содержимое страницы, а только затем делаешь паузу. Зачем?
В моём же варианте, ты сначала выполняешь прокрутку, делаешь паузу (в это время контент успевает загрузиться) и уже только потом считываешь содержимое страницы.

И ссылка для общего развития: https://selenium-python.readthedocs.io/waits.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы