const { chromium } = require('playwright-extra'); const stealth = require('puppeteer-extra-plugin-stealth')(); const fs = require('fs'); const path = require('path'); const { execSync } = require('child_process'); chromium.use(stealth); async function exportCookiesFromBotProfile() { const userDataDir = '/home/xesar/bot-profile'; const outputPath = path.resolve(__dirname, 'cookies.txt'); const lockFile = path.join(userDataDir, 'SingletonLock'); // 1. Limpieza de procesos previos para evitar el error de "Profile in use" console.log('🧹 Limpiando bloqueos de Chrome...'); try { execSync(`rm -f "${lockFile}"`); execSync('pkill -f "user-data-dir=/home/xesar/bot-profile" || true'); } catch (e) {} console.log('🚀 Iniciando Chrome con perfil de Bot...'); const context = await chromium.launchPersistentContext(userDataDir, { executablePath: '/usr/bin/google-chrome', headless: true, // Puedes ponerlo en false si quieres ver cómo entra a YouTube args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-blink-features=AutomationControlled' ] }); const page = await context.newPage(); try { // 2. Navegar a YouTube para que el navegador cargue las cookies en memoria activa console.log('📺 Refrescando sesión en YouTube...'); await page.goto('https://www.youtube.com', { waitUntil: 'networkidle', timeout: 60000 }); // Esperamos un momento para que se carguen las cookies Secure-3PSID y similares await page.waitForTimeout(5000); // 3. Obtener cookies (Playwright las extrae YA DESCIFRADAS del navegador) const cookies = await context.cookies(); // 4. Formatear al estándar Netscape (el que usa tu extensión y yt-dlp) let netscape = "# Netscape HTTP Cookie File\n# This file is generated by Enlace Directo News Bot\n\n"; cookies.forEach(c => { const domain = c.domain.startsWith('.') ? c.domain : `.${c.domain}`; const hostOnly = "TRUE"; const path = c.path; const secure = c.secure ? "TRUE" : "FALSE"; const expires = c.expires ? Math.round(c.expires) : 0; // Estructura: domain \t flag \t path \t secure \t expiration \t name \t value netscape += `${domain}\t${hostOnly}\t${path}\t${secure}\t${expires}\t${c.name}\t${c.value}\n`; }); fs.writeFileSync(outputPath, netscape); console.log(`✅ ¡Éxito! Se exportaron ${cookies.length} cookies.`); console.log(`📄 Archivo guardado en: ${outputPath}`); } catch (error) { console.error('❌ Error durante la exportación:', error.message); } finally { await context.close(); } } // Ejecución automática si se llama al script directamente if (require.main === module) { exportCookiesFromBotProfile(); } module.exports = { exportCookiesFromBotProfile };