#!/usr/bin/env python3 """ AdultDVDMarketplace Bot — Login & Open Target URL Usage: python main.py --url "https://..." python main.py """ import argparse import sys from pathlib import Path from config import BotConfig, DEFAULT_TARGET_URL, HARDCODED_USERNAME, HARDCODED_PASSWORD from logger_setup import setup_logger from browser_session import BrowserSession from auth_handler import AuthHandler from modify_listings_updater import update_wo_case_listing_prices def build_parser() -> argparse.ArgumentParser: p = argparse.ArgumentParser( description="Log in to AdultDVDMarketplace and open target URL", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=( "Examples:\n" " python main.py --url \"https://www.adultdvdmarketplace.com/xcart/adult_dvd/modify_listings.php\"\n" " python main.py\n" ), ) p.add_argument("--url", default=DEFAULT_TARGET_URL, help="Target URL to open after login") p.add_argument("--headless", action="store_true", help="Run browser headless (no window)") p.add_argument("--timeout", type=int, default=30000, help="Browser timeout ms (default: 30000)") return p def main() -> None: args = build_parser().parse_args() Path("logs").mkdir(exist_ok=True) logger = setup_logger() logger.info("=" * 60) logger.info("AdultDVDMarketplace Login Bot") logger.info("=" * 60) logger.info(f"Target URL : {args.url}") logger.info(f"Headless : {args.headless}") config = BotConfig( headless=args.headless, timeout=args.timeout, ) session = BrowserSession( headless=config.headless, state_dir=config.state_dir, timeout=config.timeout, ) try: session.start() # ── Phase 1: Authenticate ──────────────────────────────────────── logger.info("") logger.info("Phase 1 ▶ Authentication") auth = AuthHandler(session, HARDCODED_USERNAME, HARDCODED_PASSWORD) if not auth.ensure_authenticated(): logger.error("Authentication failed — aborting") sys.exit(1) # ── Phase 2: Open target page ──────────────────────────────────── logger.info("") logger.info("Phase 2 ▶ Opening target page") if session.goto(args.url): logger.info(f"Opened: {args.url}") print(f"\n Opened → {args.url}") else: logger.error("Failed to open target page — aborting") sys.exit(1) logger.info("") logger.info("Phase 3 - Updating w/o case listing prices") result = update_wo_case_listing_prices(session.page, dashboard_url=args.url) logger.info( "Update complete: matched=%s, updated=%s, failed=%s, pages=%s", result["matched"], result["updated"], result["failed"], result["pages_scanned"], ) logger.info("CSV saved: %s", result["csv_path"]) except Exception as exc: logger.error(f"Unexpected error: {exc}", exc_info=True) sys.exit(1) finally: session.stop() print("\n Done.") if __name__ == "__main__": main()