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

212
Vistas
Cierra la página después de cierto intervalo [Titiritero]

He usado titiritero para uno de mis proyectos para abrir páginas web en cromo sin cabeza, realizar algunas acciones y luego cerrar la página. Estas acciones, sin embargo, dependen del usuario. Quiero adjuntar una vida a la página, donde se cierra automáticamente después de, digamos, 30 minutos de apertura, independientemente de si se realiza alguna acción o no.

Probé la funcionalidad setTimeout() de Node JS pero no funcionó (o simplemente no pude entender cómo hacerlo funcionar). He probado lo siguiente:

 const puppeteer = require('puppeteer-core'); const browser = await puppeteer.connect({browserURL: browser_url}); const page = await browser.newPage(); // timer starts ticking here upon creation of new page (maybe in a subroutine and not block the main thread) /** .. Do something .. */ // timer ends and closePage() is triggered. const closePage = (page) => { if (!page.isClosed()) { page.close(); } }

Pero esto me da el siguiente error: Error: Protocol error: Connection closed. Most likely the page has been closed.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Su código provisto debería funcionar como excepción. ¿Está seguro de que la página aún está abierta después del tiempo de espera y de hecho es la misma página?

Puede probar este envoltorio para abrir páginas y cerrarlas correctamente.

 // since it is async it won't block the eventloop. // using `await` will allow other functions to execute. async function openNewPage(browser, timeoutMs) { const page = await browser.newPage() setTimeout(async () => { // you want to use try/catch for omitting unhandled promise rejections. try { if(page.isClosed()) { await page.close() } } catch(err) { console.error('unexpected error occured when closing page.', err) } }, timeoutMs) } // use it like so. const browser = await puppeteer.connect({browserURL: browser_url}); const min30Ms = 30 * 60 * 1000 const page = await openNewPage(browser, min30Ms); // ...

Lo anterior solo cierra las Tabs en su navegador. Para cerrar la instancia del titiritero, tendría que llamar a browser.close() , que podría ser lo que desea.

about 4 years ago · Juan Pablo Isaza Denunciar

0

page.close devuelve una promesa, por lo que debe definir closePage como una función asíncrona y usar await page.close() . Creo que la respuesta de @silvan debería abordar el problema, solo asegúrese de reemplazar si la condición

 if(page.isClosed())

con

 if(!page.isClosed())
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