Spaces:
Sleeping
Sleeping
| #!/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() | |