Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

210
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!