Model/backend/pashub_fetcher/handler/handler.py
2026-03-23 09:36:57 +00:00

66 lines
2 KiB
Python

from typing import Any, Dict, Mapping
from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeoutError
from utils.logger import setup_logger
logger = setup_logger()
def handler(event: Mapping[str, Any], context: Any) -> Dict[str, str]:
logger.info("Starting Playwright flow")
email = "random@test.com"
password = "my_fake_password"
with sync_playwright() as p:
browser = p.chromium.launch(
headless=True,
args=["--no-sandbox", "--disable-dev-shm-usage"],
)
page = browser.new_page()
try:
logger.info("Navigating to site...")
page.goto("https://pashub.net/", timeout=30000)
logger.info("Filling login form...")
page.fill("#email", email)
page.fill("#password", password)
logger.info("Submitting login...")
page.click("#btn-login")
page.wait_for_timeout(3000)
if "login" in page.url.lower():
logger.error("Login failed (still on login page)")
return {"status": "error", "message": "Login failed"}
logger.info(f"Login likely successful. URL: {page.url}")
token = page.evaluate(
"""() => {
return localStorage.getItem('token');
}"""
)
if not token:
logger.error("Login succeeded but no token found")
return {"status": "error", "message": "No token found"}
logger.info(f"Token extracted successfully: {token}")
return {"status": "ok", "token": token}
except PlaywrightTimeoutError as e:
logger.error(f"Timeout during login flow: {str(e)}")
return {"status": "error", "message": "Timeout during login"}
except Exception as e:
logger.error(f"Unexpected error: {str(e)}")
return {"status": "error", "message": str(e)}
finally:
browser.close()