Puppeteer 协议错误(Runtime.callFunctionOn):目标已关闭

问题描述 投票:0回答:1

我是 javascript 和 nodejs 的新手

我正在尝试使用 google puppeteer 使用 node.js 生成 PDF 表。

我遵循了 YouTube 教程,下面的代码与教程中使用的相同。 注意:我不相信以下代码。

我使用了一个示例 HTML 模板,我从 json 文件填充数据。

    const puppeteer = require('puppeteer');
    const fs = require('fs-extra');
    const hbs = require('handlebars');
    const path = require('path');
    const data = require('./stressData2.json');

    const compile = async function(templateName, data){
        const filePath = await path.join(process.cwd(), 'templates', `${templateName}.hbs`);
        const html = await fs.readFile(filePath, 'utf-8');
        return await hbs.compile(html)(data);
    };

    (async function(){
        try{
            const browser = await puppeteer.launch();
            const page = await browser.newPage();
            const content = await compile('stressTemplate', data);
            await page.setContent(content);
            await page.pdf({
                path: 'pdfs/mypdf.pdf',
                format: 'A4',
                printBackground: true
            });

            console.log('done');

            await browser.close();
            await process.exit();
        } catch(e){
            console.log('Error', e);
        }
    })();

我可以压力测试直到 100000 个结果,但是当我推到 200000 个结果时 我收到以下错误

{ Error: Protocol error (Runtime.callFunctionOn): Target closed.
    at Promise (/userdir/node_modules/puppeteer/lib/Connection.js:186:56)
    at new Promise (<anonymous>)
    at CDPSession.send (/userdir/node_modules/puppeteer/lib/Connection.js:185:12)
    at ExecutionContext.evaluateHandle (/userdir/node_modules/puppeteer/lib/ExecutionContext.js:
115:75)
    at ExecutionContext.<anonymous> (/userdir/node_modules/puppeteer/lib/helper.js:145:23)
    at ExecutionContext.evaluate (/userdir/node_modules/puppeteer/lib/ExecutionContext.js:58:31)
    at ExecutionContext.<anonymous> (/userdir/node_modules/puppeteer/lib/helper.js:145:23)
    at Frame.evaluate (/userdir/node_modules/puppeteer/lib/FrameManager.js:447:20)
  -- ASYNC --
    at Frame.<anonymous> (/userdir/node_modules/puppeteer/lib/helper.js:144:27)
    at Frame.setContent (/userdir/node_modules/puppeteer/lib/FrameManager.js:541:16)
    at Frame.<anonymous> (/userdir/node_modules/puppeteer/lib/helper.js:145:23)
    at Page.setContent (/userdir/node_modules/puppeteer/lib/Page.js:615:42)
    at Page.<anonymous> (/userdir/node_modules/puppeteer/lib/helper.js:145:23)
    at /userdir/git/NodeJsServer/serverPdfGenerator.js:18:20
  message: 'Protocol error (Runtime.callFunctionOn): Target closed.' }

我在网上搜索过,但无法解决这个问题,以前有人遇到过这个问题吗? 我也看到了这篇文章UnhandledPromiseRejectionWarning:错误:协议错误(Runtime.callFunctionOn):目标已关闭。 (Puppeteer)但无法解决

Github 上的 PR 链接:https://github.com/GoogleChrome/puppeteer/issues/3683

javascript node.js google-chrome node-modules puppeteer
1个回答
0
投票

请致电

await browser._detach()

之前

await browser.close();

© www.soinside.com 2019 - 2024. All rights reserved.