#!/usr/bin/env python3 """ Extract YouTube cookies with manual login using Camoufox. Run this ONCE to login, then cookies will work for weeks. """ import asyncio import sys from pathlib import Path from camoufox.async_api import AsyncCamoufox async def extract_cookies_with_login(output_path='youtube-cookies.txt'): """ Extract YouTube cookies after manual login. Opens browser window for user to login. """ print("🦊 Starting Camoufox (with GUI for login)...") print("") print("╔══════════════════════════════════════════════════╗") print("β•‘ πŸ“ INSTRUCTIONS: β•‘") print("β•‘ 1. Browser will open β•‘") print("β•‘ 2. Login to your YouTube account β•‘") print("β•‘ 3. Press Enter in this terminal when done β•‘") print("β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•") print("") async with AsyncCamoufox( headless=False, # GUI visible for login humanize=True, geoip=True, ) as browser: page = await browser.new_page() # Navigate to YouTube print("πŸ“Ί Loading YouTube...") await page.goto('https://www.youtube.com', wait_until='domcontentloaded', timeout=30000) # Wait for user to login input("⏸️ Press Enter after you've logged in to YouTube...") # Navigate to confirm cookies are set await page.goto('https://www.youtube.com', wait_until='domcontentloaded') await asyncio.sleep(2) # Extract cookies cookies = await page.context.cookies() # Filter YouTube cookies yt_cookies = [c for c in cookies if 'youtube.com' in c['domain']] if not yt_cookies: print("❌ No YouTube cookies found!") return False # Save to Netscape format output = Path(output_path) with open(output, 'w') as f: f.write("# Netscape HTTP Cookie File\n") f.write("# Generated by Camoufox with logged-in account\n") for c in yt_cookies: # Handle expires properly expires = int(c.get('expires', 0)) if expires <= 0: expires = 2147483647 # Max 32-bit timestamp (year 2038) line = f"{c['domain']}\tTRUE\t{c['path']}\t" line += f"{'TRUE' if c.get('secure') else 'FALSE'}\t" line += f"{expires}\t{c['name']}\t{c['value']}\n" f.write(line) # Set secure permissions output.chmod(0o600) print("") print(f"βœ… Cookies saved: {output_path}") print(f" Total cookies: {len(yt_cookies)}") print(f" Logged in: Yes") print("") print("πŸ’‘ These cookies will work for 2-4 weeks!") print(" Run this script again when they expire.") return True if __name__ == '__main__': output = sys.argv[1] if len(sys.argv) > 1 else 'youtube-cookies.txt' success = asyncio.run(extract_cookies_with_login(output)) sys.exit(0 if success else 1)