from playwright.sync_api import sync_playwright, BrowserContext
from . import config
DEFAULT_SETTINGS = {
"headless": False,
"viewport_width": 1280,
"viewport_height": 900,
"locale": "sv-SE",
"slow_mo": 0,
"notify_on_complete": False,
}
def launch_context(playwright, settings: dict | None = None) -> BrowserContext:
"""Startar en persistent webbläsarprofil.
Persistent context = cookies/session sparas mellan körningar i
config.BROWSER_PROFILE_DIR. Är sessionen fortfarande giltig nästa
gång skriptet körs behöver du inte logga in igen.
settings (alla valfria, se DEFAULT_SETTINGS för standardvärden):
headless -- kör utan synligt fönster (kräver redan giltig
inloggningssession - BankID/2FA går inte att
godkänna i ett headless-fönster)
viewport_width/height
locale -- t.ex. "sv-SE"
slow_mo -- millisekunder paus mellan varje Playwright-
åtgärd, för att kunna följa med ögat vid felsökning
notify_on_complete -- skrivbordsnotis när körningen är klar (hanteras
av flow_engine, inte här)
"""
s = {**DEFAULT_SETTINGS, **(settings or {})}
context = playwright.chromium.launch_persistent_context(
user_data_dir=str(config.BROWSER_PROFILE_DIR),
headless=bool(s["headless"]),
accept_downloads=True,
viewport={"width": int(s["viewport_width"]), "height": int(s["viewport_height"])},
locale=s["locale"],
slow_mo=float(s["slow_mo"]),
)
return context
def get_page(context: BrowserContext):
if context.pages:
return context.pages[0]
return context.new_page()