Пытаюсь захватить судоку, но Selenium не нашел его в Chrome [закрыто]Python

Программы на Python
Ответить
Anonymous
 Пытаюсь захватить судоку, но Selenium не нашел его в Chrome [закрыто]

Сообщение Anonymous »

Я пытаюсь записать это судоку с помощью 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'
try:
driver = Chrome(options=options)
return driver
except WebDriverException as e:
raise

def _wait_for_cookie(driver) -> None:

try:
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'//iframe')))
except TimeoutException:
print("Timeout waiting for cookie.")
try:
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
try:
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)
raise
finally:
if driver:
try:
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-контейнер на сайте? После этого я могу преобразовать поля и число в строку судоку.
Пример изображения веб-браузера
В функции check_riddle также есть не очень приятный тайм-аут в 5 секунд, потому что в противном случае веб-сайт загружается не полностью. Может быть, кто-нибудь подскажет мне, как это сделать лучше.
Большое спасибо за помощь.
BR ками

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

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

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

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

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

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