提问者:小点点

如何处理同步执行中的puppeteer异常


我正在尝试实现同步调用:

puppeteer.launch().then(browser => {
            let html = `
            <!DOCTYPE html>
            <html>
               <body>
                 <div>
                    Hello
                 </div>
              </body>
            </html>
            `;

            let path = 'test.png';

            browser.newPage().then(page => {
                page.setContent(html).then(() => {
                    page
                        .screenshot({
                            path: path,
                            clip: {
                                x: 50,
                                y: 50,
                                width: 100,
                                height: 100
                            },
                            omitBackground: true
                        })
                        .then(() => {});
                });
            });
            browser.close().then(() => {});
        });

我得到以下例外情况:

(节点:22140)UnhandledPromiseRejectionWarning:错误:协议错误(Target.CreateTarget):目标已关闭。在Promise(C:\imageServer\node_modules\puppeteer\lib\connection.js:74:56)在new Promise()在connection.send(C:\imageServer\node_modules\puppeteer\lib\connection.js:73:12)在browser._createpageincontext(C:\imageServer\node_modules\puppeteer\lib\browser.js:174:47)在browsercontext.newpage(C:\imageserver\node_modules\puppeteer\lib\helper.js:112:23)在puppeteer.launch.then.browser(C:\imageserver\imageserver.js:48:12)在process._tickCallback(internal/process/next_tick.js:68:7)(节点:22140)unhandledpromiseerejectionwarning:未处理的承诺拒绝。这个错误可能是由于抛出一个没有catch块的异步函数内部,或者是由于拒绝了一个未用.catch()处理的承诺。(拒绝ID:1)(节点:22140)[DEP0018]拒绝警告:不推荐未处理得承诺拒绝.将来,未处理的承诺拒绝将以非零退出代码终止node.js进程。

我怎么解决这个?


共1个答案

匿名用户

问题是您是在browser.newpage之后关闭浏览器。您应该将browser.close()移动到屏幕截图

page
    .screenshot({
        path: path,
        clip: {
            x: 50,
            y: 50,
            width: 100,
            height: 100
        },
        omitBackground: true
    })
    .then(() => browser.close());