Spaces:
Sleeping
Sleeping
| from playwright.sync_api import sync_playwright | |
| import json | |
| def extract_dom_features(url: str) -> str: | |
| if not url.startswith("http"): | |
| return json.dumps({"error": "No valid URL provided."}) | |
| try: | |
| with sync_playwright() as p: | |
| browser = p.chromium.launch(headless=True) | |
| page = browser.new_page() | |
| # 10-second timeout to prevent stalling on dead phishing links | |
| page.goto(url, timeout=10000) | |
| # Extract where login forms actually send data | |
| forms = page.locator("form").evaluate_all( | |
| "elements => elements.map(e => ({ action: e.action, method: e.method }))" | |
| ) | |
| # Extract invisible tracking/token fields | |
| hidden_inputs = page.locator("input[type='hidden']").evaluate_all( | |
| "elements => elements.map(e => ({ name: e.name, value: e.value }))" | |
| ) | |
| browser.close() | |
| return json.dumps({"forms": forms, "hidden_inputs": hidden_inputs}) | |
| except Exception as e: | |
| return json.dumps({"scraper_error": str(e)}) |