"""Generate synthetic forms for classes the static web crawl under-represents (card payment, OTP, password change/reset, checkout address, identifier-first logins, SPA div-soup markup), then extract them with the standard extractor. They are labeled later by the same teacher pass as real forms. Usage: python synth.py OUT_DIR N [--conc 32] [--seed 5] """ import argparse import asyncio import gzip import json import os import random import re import sys import aiohttp sys.path.insert(0, "/job/work") from zap.extract import extract_page # noqa: E402 SCENARIOS = [ (8, "checkout payment step with credit/debit card fields (card number, name on card, expiry, CVC)"), (4, "checkout page with shipping address AND card payment fields in one form"), (4, "card payment form where expiry month and expiry year are two separate