Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

105
Vistas
¿Cómo guardo la autenticación con titiritero?

Necesito hablar con un bot de Telegram, con mi aplicación web. Así que decidí hacer un web scrapping, no sé si es la mejor estrategia.

Cuando intento acceder a la web de Telegram, necesito autenticarme y luego continuar con el chat, pero si vuelvo a ejecutar el servidor, necesito autenticarme manualmente nuevamente. Traté de guardar las cookies, el tiempo de espera de espera es de 200 segundos, por lo que puedo iniciar sesión manualmente, pero las cookies llegaron como una matriz vacía.

 const puppeteer = require("puppeteer"); const fs = require("fs").promises; (async () => { const browser = await puppeteer.launch({ headless: false, executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome' }); const page = await browser.newPage(); await page.goto("https://web.telegram.org/k/"); console.log('before waiting'); await page.waitForTimeout(200000) console.log('after waiting'); const cookies = await page.cookies(); await fs.writeFile('./coockie.json', JSON.stringify(cookies, null, 2)); // await browser.close(); })();
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Es bastante difícil autenticarse en Telegram usando titiritero.

Parte 1 Recopilación de datos

En primer lugar, debemos recopilar localStorage (tal vez incluso solo localStorage). Si también queremos recopilar todas las cookies, tenemos que eliminar page.cookies(); y usa page._client.send('Network.getAllCookies'); en cambio.

Ejecute este código para recopilar los datos necesarios

 import puppeteer from 'puppeteer'; import { setTimeout as wait } from 'timers/promises'; import fs from 'fs'; (async () => { const browser = await puppeteer.launch({ headless: false }); const page = await browser.newPage(); await page.goto('https://web.telegram.org/z/'); await wait(60000); //We need this in order to have time for qr-code authentication const localStorageData = await page.evaluate(() => { let json = {}; for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); json[key] = localStorage.getItem(key); } return json; }); await fs.writeFile('localStorageData.json', JSON.stringify(localStorageData, null, 2), function(error, data){ if(error) throw error; console.log(data); }); const cookies = await page._client.send('Network.getAllCookies'); await fs.writeFile('cookies.json', JSON.stringify(cookies, null, 2), function(error, data){ if(error) throw error; console.log(data); }); await browser.close() })();

Parte 2 Uso de los datos recopilados para la unificación

Antes de comenzar, debemos abrir nuestro archivo cookies.json. Si se ve así:

 { "cookies": [ { //some data }, { //some data } ] }

entonces debe corregirse manualmente a este aspecto

 [ { //some data }, { //some data } ]

ok, el archivo ha sido corregido, adelante

Ejecute este código para autenticarse

 import puppeteer from 'puppeteer'; import { setTimeout as wait } from 'timers/promises'; import fs from 'fs'; (async () => { const browser = await puppeteer.launch({ headless: false }); const page = await browser.newPage(); await page.goto('https://web.telegram.org');// here without /z/, with z for some reason it doesn't work await fs.readFile('./cookies.json', async (err, data) => { if (err){ console.log(err); } else { let json = JSON.parse(data); await page.setCookie(...json); console.log(json); //your code using json object } }); await fs.readFile('./localStorageData.json', async (err, data) => { if (err){ console.log(err); } else { let json = JSON.parse(data); await page.evaluate(localStorageData => { localStorage.clear(); for (let key in localStorageData) { console.log(key); localStorage.setItem(key, localStorageData[key]); } }, json); console.log(json); } }); await wait(50000); await browser.close() })();

Eso es todo. Te recomiendo que uses dramaturgo en lugar de titiritero. Mucho más fácil de usar y más comprensible

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda