Захват судоку, но Selenium не нашел его с помощью Chrome в HTMLPython

Программы на Python
Ответить
Anonymous
 Захват судоку, но Selenium не нашел его с помощью Chrome в HTML

Сообщение Anonymous »

Я пытаюсь захватить [это судоку](https://www.prisma.de/raetsel/epaper/ra8IU0) с помощью Selenium и Python после принятия файла cookie.
С помощью этого кода я мог бы принять файл cookie в iframe и записать основной сайт в файл output.html для отладки:

Код: Выделить всё

from selenium.webdriver import Chrome, ChromeOptions

Код: Выделить всё

from selenium.webdriver.common.by import By

Код: Выделить всё

from selenium.webdriver.support.ui import WebDriverWait

Код: Выделить всё

from selenium.webdriver.support import expected_conditions as EC

Код: Выделить всё

from selenium.common.exceptions import (

Код: Выделить всё

    TimeoutException,

Код: Выделить всё

    NoSuchElementException,

Код: Выделить всё

    WebDriverException,

Код: Выделить всё

import time

Код: Выделить всё

BOOKING_URL = "https://www.prisma.de/raetsel/epaper/ra8IU0"

Код: Выделить всё

def get_webdriver() -> Chrome:

Код: Выделить всё

    options = ChromeOptions()

Код: Выделить всё

    options.add_argument(

Код: Выделить всё

        "user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "

Код: Выделить всё

        "AppleWebKit/537.36 (KHTML, like Gecko) "

Код: Выделить всё

        "Chrome/124.0.0.0 Safari/537.36"

Код: Выделить всё

    options.page_load_strategy = 'normal'

Код: Выделить всё

        driver = Chrome(options=options)

Код: Выделить всё

        return driver

Код: Выделить всё

    except WebDriverException as e:

Код: Выделить всё

def _wait_for_cookie(driver) -> None:

Код: Выделить всё

        WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'//iframe')))

Код: Выделить всё

    except TimeoutException:

Код: Выделить всё

        print("Timeout waiting for cookie.")

Код: Выделить всё

        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"//button[contains(., 'Einwilligen')]"))).click()

Код: Выделить всё

    except TimeoutException:

Код: Выделить всё

        print("Timeout waiting for cookie.")

Код: Выделить всё

    time.sleep(3)

Код: Выделить всё

    driver.switch_to.default_content()

Код: Выделить всё

    with open("output.html", "w", encoding="utf-8") as f:

Код: Выделить всё

       f.write(driver.page_source)    

Код: Выделить всё

    print (driver.find_elements(By.XPATH,"//div[contains(., 'k-board k-board--html')]"))

Код: Выделить всё

def check_riddle(url: str = BOOKING_URL) -> bool:

Код: Выделить всё

    driver = None

Код: Выделить всё

        driver = get_webdriver()

Код: Выделить всё

        driver.get(url)

Код: Выделить всё

        print(driver.current_url)

Код: Выделить всё

        time.sleep(5)

Код: Выделить всё

        _wait_for_cookie(driver)

Код: Выделить всё

   except Exception as exc: 

Код: Выделить всё

        print("Error during riddle check: %s", exc)

Код: Выделить всё

    finally:

Код: Выделить всё

        if driver:

Код: Выделить всё

                driver.quit()

Код: Выделить всё

                print("WebDriver closed.")

Код: Выделить всё

           except Exception as exc:

Код: Выделить всё

                print("Error closing WebDriver: %s", exc)

Код: Выделить всё

if __name__ == "__main__":

Код: Выделить всё

    check_riddle()
После этого я вижу судоку в браузере Chrome, но скрипт не находит никаких «k-board k-board--html» и т. д. В файле output.html также есть только главное меню.
Как найти нужный div-контейнер на сайте? После этого я могу преобразовать поля и число в строку судоку.
[![Пример изображения веб-браузера][1]][1]
[1]: https://i.sstatic.net/3K6Ii8wl.jpg
В функции check_riddle также есть не очень приятный таймаут в 5 секунд, потому что в противном случае веб-сайт не будет полностью загружен. Может быть, кто-нибудь подскажет мне, как это сделать лучше.
Спасибо большое.
BR ками

Подробнее здесь: https://stackoverflow.com/questions/798 ... me-in-html
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»