С помощью этого кода я мог бы принять файл 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()
В файле output.html также есть только главное меню.
Как найти нужный div-контейнер на сайте? После этого я могу преобразовать поля и число в строку судоку.
Пример изображения веб-браузера
В функции check_riddle также есть не очень приятный тайм-аут в 5 секунд, потому что в противном случае веб-сайт загружается не полностью. Может быть, кто-нибудь подскажет мне, как это сделать лучше.
Большое спасибо за помощь.
BR ками
Подробнее здесь: https://stackoverflow.com/questions/798 ... ith-chrome
Мобильная версия