From 49d3cfbd6afe051ca070f5b45f9fd0a3933e65b2 Mon Sep 17 00:00:00 2001 From: Edvaldo Szymonek Date: Wed, 19 Aug 2026 18:32:50 -0300 Subject: [PATCH] =?UTF-8?q?corrige=20'TargetCloseError'=20na=20gera=C3=A7?= =?UTF-8?q?=C3=A3o=20do=20relat=C3=B3rio=20(#500)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/reports/reports.tsx | 116 ++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 59 deletions(-) diff --git a/src/reports/reports.tsx b/src/reports/reports.tsx index 21ea9fd6..a75d33a9 100644 --- a/src/reports/reports.tsx +++ b/src/reports/reports.tsx @@ -22,64 +22,63 @@ export async function generateReport

(Component: Comp titulo ) - const browser = await puppeteer.launch({ - headless: true, - executablePath: process.env.PUPPETEER_EXECUTABLE_PATH, - args: [ - '--no-sandbox', - '--disable-setuid-sandbox', - '--disable-dev-shm-usage', // Avoid /dev/shm usage - '--disable-accelerated-2d-canvas', - '--disable-gpu', // GPU not typically available in containers - '--no-zygote', // Disable Chrome zygote process - '--single-process', // Run in single process mode - '--no-first-run', - '--disable-extensions', - '--disable-background-networking', - '--disable-background-timer-throttling', - '--disable-backgrounding-occluded-windows', - '--disable-breakpad', - '--disable-client-side-phishing-detection', - '--disable-component-extensions-with-background-pages', - '--disable-default-apps', - '--disable-features=site-per-process,TranslateUI,BlinkGenPropertyTrees', - '--disable-hang-monitor', - '--disable-ipc-flooding-protection', - '--disable-popup-blocking', - '--disable-prompt-on-repost', - '--disable-renderer-backgrounding', - '--disable-sync', - '--force-color-profile=srgb', - '--metrics-recording-only', - '--safebrowsing-disable-auto-update', - '--enable-automation', - '--password-store=basic', - '--use-mock-keychain', - ] - }) - const page = await browser.newPage() + const executablePath = process.env.PUPPETEER_EXECUTABLE_PATH + let browser: Awaited> | undefined - await page.setContent(htmlContent, { waitUntil: 'networkidle0' }) - await Promise.all([ - page.addStyleTag({ + try { + // --single-process/--no-zygote crash current Chrome in containers (TargetCloseError). + browser = await puppeteer.launch({ + headless: true, + ...(executablePath ? { executablePath } : {}), + args: [ + '--no-sandbox', + '--disable-setuid-sandbox', + '--disable-dev-shm-usage', + '--disable-gpu', + '--no-first-run', + '--disable-extensions', + '--disable-background-networking', + '--disable-background-timer-throttling', + '--disable-backgrounding-occluded-windows', + '--disable-breakpad', + '--disable-client-side-phishing-detection', + '--disable-component-extensions-with-background-pages', + '--disable-default-apps', + '--disable-hang-monitor', + '--disable-ipc-flooding-protection', + '--disable-popup-blocking', + '--disable-prompt-on-repost', + '--disable-renderer-backgrounding', + '--disable-sync', + '--force-color-profile=srgb', + '--metrics-recording-only', + '--safebrowsing-disable-auto-update', + '--enable-automation', + '--password-store=basic', + '--use-mock-keychain', + ] + }) + const page = await browser.newPage() + + await page.setContent(htmlContent, { waitUntil: 'domcontentloaded' }) + await page.addStyleTag({ path: resolveSource('reports/assets/styles/root.css') }) - ]) - const date = new Date().toLocaleDateString('pt-BR') + const date = new Date().toLocaleDateString('pt-BR') - const buffer = await page.pdf({ - format: 'A4', - printBackground: true, - timeout: 120000, - margin: { - top: '0', - right: '0', - bottom: '50px', - left: '0' - }, - displayHeaderFooter: true, - footerTemplate: ` + return await page.pdf({ + format: 'A4', + printBackground: true, + timeout: 120000, + margin: { + top: '0', + right: '0', + bottom: '50px', + left: '0' + }, + displayHeaderFooter: true, + footerTemplate: `

${date}
@@ -87,10 +86,9 @@ export async function generateReport

(Component: Comp

`, - headerTemplate: `
` - }) - - await browser.close() - - return buffer + headerTemplate: `
` + }) + } finally { + await browser?.close() + } }