Sudoku wird erfasst, aber Selenium hat es mit Chrome in HTML nicht gefundenPython

Python-Programme
Anonymous
 Sudoku wird erfasst, aber Selenium hat es mit Chrome in HTML nicht gefunden

Post by Anonymous »

Ich versuche, dieses Sudoku mit Selenium und Python zu erfassen, nachdem ich das Cookie akzeptiert habe.
Mit diesem Code konnte 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. Außerdem gibt es in der Datei „output.html“ nur das Hauptmenü.
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
Außerdem gibt es in der check_riddle-Funktion einen nicht so schönen Timeout von 5 Sekunden, da sonst die Website nicht vollständig geladen wird. Vielleicht kann mir jemand sagen, wie ich es besser machen kann.
Vielen Dank.
BR kami

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post