Ich habe versucht, Sudoku zu erfassen, aber Selenium hat es mit Chrome nicht gefunden [geschlossen]Python

Python-Programme
Anonymous
 Ich habe versucht, Sudoku zu erfassen, aber Selenium hat es mit Chrome nicht gefunden [geschlossen]

Post by Anonymous »

Ich versuche, dieses Sudoku mit Selenium und Python zu erfassen, nachdem ich das Cookie akzeptiert habe.
Mit diesem Code könnte ich das Cookie im Iframe akzeptieren und die Hauptseite zum Debuggen in die Ausgabe.html schreiben:

Code: Select all

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()

Danach kann ich das Sudoku in meinem Chrome-Browser sehen, aber das Skript findet kein „k-board k-board--html“ usw.
Es gibt auch nur das Hauptmenü in der Datei „output.html“.
Wie finde ich den richtigen Div-Container auf der Website? Danach kann ich die Kästchen und die Zahl in einen Sudoku-String umwandeln.
Beispielbild eines Webbrowsers
Es gibt auch einen nicht so schönen Timeout für 5 Sekunden in der check_riddle-Funktion, da sonst die Website nicht vollständig geladen wird. Vielleicht kann mir jemand sagen, wie ich es besser machen kann.
Vielen Dank für die Hilfe.
BR kami

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post