javascript - 如何处理同步执行时的 puppeteer 异常

标签 javascript node.js es6-promise 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(() => {});
        });

我收到以下异常:

( Node :22140)UnhandledPromiseRejectionWarning:错误:协议(protocol)错误(Target.createTarget):目标已关闭。 在 Promise (C:\ImageServer\node_modules\puppeteer\lib\Connection.js:74:56) 在新的 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\Browser.js:367:26) 在 Browser.newPage (C:\ImageServer\node_modules\puppeteer\lib\Browser.js:166:33) 在浏览器。 (C:\ImageServer\node_modules\puppeteer\lib\helper.js:112:23) 在 puppeteer.launch.then.browser (C:\ImageServer\imageServer.js:48:12) 在 process._tickCallback (内部/process/next_tick.js:68:7) ( Node :22140)UnhandledPromiseRejectionWarning:未处理的 promise 拒绝。此错误的根源是在没有 catch block 的情况下抛出异步函数内部,或者拒绝未使用 .catch() 处理的 Promise。 (拒绝 ID:1) ( Node :22140)[DEP0018] DeprecationWarning:未处理的 promise 拒绝已被弃用。将来,未处理的 Promise 拒绝将会以非零退出代码终止 Node.js 进程。

如何解决这个问题?

最佳答案

问题是您在 browser.newPage 之后立即关闭浏览器。您应该将 browser.close() 移至用于屏幕截图then

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

关于javascript - 如何处理同步执行时的 puppeteer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57976109/

相关文章:

javascript - 使用 javascript 切换类

javascript - 使用 Mocha 在 NodeJS 和 MongoDB 中测试用户模型时没有结果

javascript - 找不到 Vue.js $ref

Javascript/Node.JS 多次查找两个字符串之间的文本

javascript - AngularJs 在 forEach 中的 promise

javascript - 单击按钮后关闭模式

node.js - firebase/firestore 获取嵌套集合

javascript - 我对 new Promise((resolve, reject) => {[loop]}) 阻塞而 Promise.resolve().then([loop]) 不是阻塞感到困惑

javascript - 如何在获取 promise 中的错误时捕获网络错误

node.js - Promise.all().then() - then() 在 all() 完成之前执行