@dima_program

Как прокрутить страницу вниз на python?

Всем добрый день. Есть парсер, который парсит эту страницу:
https://www.flashscore.ru/
Он кликает на матчи и выводит их ссылку (сайт устроен так, что открывает второй гугл хром и в нем уже этот матч, запустите скрипт и поймёте о чем я говорю). Но после 17 матча (ЛАСК/ШТУРМ) выводит ошибку. Нужно прокручивать страницу вниз, чтобы дальше кликать на матчи. Подскажите, как прокрутить страницу на несколько матчей вниз или вообще до самого низу? Здесь с помощью js это делать? Заранее спасибо.
Код:
import time
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup

count = 0
driver = webdriver.Chrome(executable_path="C:\\Users\\iljal\\PycharmProjects\\google_sheets\\chromedriver") # здесь указать путь к chromedriver он обычно в той же папке где и Ваш проект
driver.get('https://www.flashscore.ru/')
time.sleep(3) # C:\Users\iljal\PycharmProjects\google_sheets\chromedriver

arr = driver.find_elements_by_css_selector(
    ".event__match.event__match--scheduled.event__match--oneLine"
)


# optional (if you are not satisfied with the download speed)
driver.set_page_load_timeout(0.5)


for channel in arr:
    try:
        channel.click()
        count += 1
        if count == 17:
            driver.execute_script(
                "var evt = document.createEvent('MouseEvents');evt.initEvent('wheel', true, true);evt.deltaY = -100000;document.querySelector('.yamb-conversation__content').dispatchEvent(evt);") # такая прокрутка не работает, выводит ошибку:
    except TimeoutException:
        print("data not received. need more time in driver.set_page_load_timeout")
        continue

    driver.switch_to.window(driver.window_handles[arr.index(channel)+1])


    link = driver.current_url
    print(link)

    driver.switch_to.window(driver.window_handles[0])

После 17 матчей выводит ошибку при попытке прокрутить вниз:
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot read property 'dispatchEvent' of null
  (Session info: chrome=83.0.4103.97)
  • Вопрос задан
  • 6067 просмотров
Пригласить эксперта
Ответы на вопрос 2
SoreMix
@SoreMix Куратор тега Python
yellow
driver.execute_script("window.scrollTo(0, 1080)")
или
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Ответ написан
Комментировать
LazyTalent
@LazyTalent
Data Engineer, Freelancer
В данном случае, имхо, лучше крутить страницу не до самого низа, а до элемента на который ты хочешь кликнуть:
for channel in arr:
    try:
        driver.execute_script("arguments[0].scrollIntoView();", channel)
        channel.click()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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