Creé un servicio nodeJS que toma una captura de pantalla de una aplicación de una sola página usando Puppeteer. Cuando el SPA termina de cargarse, se agrega un elemento <div> al DOM. Estoy tratando de capturar esto para continuar con la captura de pantalla.
Cada solicitud al servicio se ejecuta en un nuevo contexto de incógnito Titiritero.
const context = await browser.createIncognitoBrowserContext(); const page = await context.newPage();Estoy agregando algunos encabezados HTTP personalizados para la autenticación de Google, ya que el SPA está detrás de un proxy consciente de la identidad:
const auth = new GoogleAuth(); const client = await auth.getIdTokenClient(process.env.AUDIENCE); const headers = await client.getRequestHeaders(url); await page.setExtraHTTPHeaders(headers);El resto del código es el siguiente:
const response = await page.goto(url, {waitUntil: 'domcontentloaded', timeout: 50000}); error.handleResponse(response, log); // Now wait for the dom element marking the map finished loading log.writeToConsole('Waiting for the #trigger-print selector'); await page.waitForSelector('#trigger-print', {timeout: 50000}); log.writeToConsole('Selector found!'); El servicio web que contiene este fragmento está dockerizado; cuando ejecuto la imagen en mi máquina local (con MacOS 10.15.7) y uso el servicio web, se encuentra el selector. Sin embargo, cuando implemento la misma imagen en la nube (carga de trabajo de Kubernetes o Google podría ejecutar), page.goto(url) tiene éxito, pero la función waitForSelector siempre se agota. En este caso, page.content() y no hay ningún elemento <div id=trigger_print> . Parece que el SPA dejó de cargarse después page.goto(url) .
Estoy registrando todas las solicitudes y la salida de la consola, pero nada parece fuera de lo común. Lo que me falta, ¿qué podría ser y/o cómo podría depurarlo?