@dima_program

Как исправить ошибку при клике на сайте?

Всем добрый день. Есть скрипт на Python, который парсит эту страницу:
https://www.flashscore.ru/
Кликает на каждый матч и выводит ссылку и дату каждого матча.
Так как при клике на матч открывается новый браузер, в коде написано каждый раз возвращаться на предыдущее окно.
Код:
import time
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup


driver = webdriver.Chrome(executable_path="C:\\Users\\iljal\\PycharmProjects\\parsingg\\chromedriver") # здесь указать путь к chromedriver он обычно в той же папке где и Ваш проект
driver.get('https://www.flashscore.ru/')
time.sleep(3) # C:\Users\iljal\PycharmProjects\parsingg\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()
    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])

    html = driver.page_source
    soup = BeautifulSoup(html, 'lxml')

    almost_time = soup.find('div', class_='description__time mstat-date').get_text(strip=True)
    res_time = almost_time.split()
    time = res_time[-1]

    link = driver.current_url
    print(link)
    print(time)
    driver.switch_to.window(driver.window_handles[0])

Но почему-то после 17 матча (ЛАСК/ШТУРМ) PyCharm выводит ошибку, что это место не кликабельно:
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <div id="g_1_GzZFvoYt" title="Подробности матча!" class="event__match event__match--scheduled event__match--last event__match--oneLine">...</div> is not clickable at point (531, 814). Other element would receive the click: <p id="onetrust-policy-text">...</p>
  (Session info: chrome=83.0.4103.97)

Подскажите, что не так? Следующий матч кликабелен, почему он ругается? Заранее спасибо.
  • Вопрос задан
  • 282 просмотра
Пригласить эксперта
Ответы на вопрос 1
moonz
@moonz
web developer | seo | design
Некоторые элементы становятся доступны не моментально, по этому нужно настроить не явное ожидание.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

Документация
Ответ написан
Ваш ответ на вопрос

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

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