Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

211
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda