File size: 1,170 Bytes
92f63a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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)})