0
respostas

Puppeteer : Timed out after 30000 ms while trying to connect to the browser!

Pessoal, tenho um scrapper Puppeteer rodando no Google Cloud Functions para automatizar processo em um site. Esse scrapper roda a cerca de 1 ano e nessa semana começou a dar pau sem termos mexido nele. Nos logs de erros do GPC aparece:

TimeoutError: Timed out after 30000 ms while trying to connect to the browser! Only Chrome at revision r818858 is guaranteed to work.

O que estou achando muito estranho é que no ambiente de desenvolvimento está rodando e só em produção que parou. O erro não acontece se eu mudar a URL para a requisição do scrapper em produção, mesmo sendo uma outra página do mesmo domínio. Mas, novamente, no teste continua funcionando.

Estava utilizando o Puppeteer 2.1.1 e já fiz o upgrade para 5.5.0

Aqui eu isolei parte do código para poder replicar o probema. Está rodando no Google Cloud Funcions sendo o trigger uma requisição https

const puppeteer = require('puppeteer');

const onRequest = async (req, res) => {

    function run() {
        return new Promise(async (resolve, reject) => {
            try {

                browser = await puppeteer.launch({
                    headless: true,
                    ignoreHTTPSErrors: true,
                    args: [
                        '--no-sandbox',
                        '--disable-setuid-sandbox',
                    ],                                        
                });

                const context = await browser.createIncognitoBrowserContext();
                page = await context.newPage();          

                const DARF_URL = "http://www31.receita.fazenda.gov.br/SicalcWeb/UF.asp?AP=P&Person=N&TipTributo=1&FormaPagto=1";
                await page.goto(DARF_URL);
                const element = await page.$("body > form > table > tbody > tr > td > div > strong > a > font > small > small > strong");
                const text = await page.evaluate(element => element.textContent, element);
                const response = {
                    status: 'ok',
                    text: text,
                }
                browser.close();
                resolve(JSON.stringify(response))
            } catch (error) {
                const response = {
                    status: 'error',
                    error: error,
                }                
                reject(response);
            }
        })
    }

    run().then((response) => {
        res.send(response);
        return
    }).catch(error => {
        res.send(error);
    })
}

module.exports = {
    onRequest
}