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