当前位置: 首页 > 知识库问答 >
问题:

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

邹昊
2023-03-14

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

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个答案

蔚和安
2023-03-14

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

page
    .screenshot({
        path: path,
        clip: {
            x: 50,
            y: 50,
            width: 100,
            height: 100
        },
        omitBackground: true
    })
    .then(() => browser.close());
 类似资料:
  • 在Spring集成中是否可以保持通道同步(发送消息后获得确认)但同时处理更多消息(并行处理)而无需使用线程创建自己的代码(即ExecutorService执行和提交工作人员)并等待它们?我想通过FTP上传文件,但同时上传更多文件,而无需在代码中创建自己的线程。我需要知道所有文件何时上传(这就是我希望它是同步的原因)。是否可以通过Spring集成配置,如果可以,如何?

  • 问题内容: 将NodeJS与MongoDB + Mongoose结合使用。 首先,我知道异步非阻塞代码的优点。所以我确实处理回调。但是最后我遇到了以下问题。 可以说我有一个可以随时被用户调用的函数。超级“闪电般的”用户可能几乎同时调用两次。 当然它是这样执行的:查找查询,查找查询,保存查询,保存查询 这完全破坏了应用程序的逻辑(应查找查询,保存查询,查找查询,保存查询)。因此,我决定通过“锁定”特

  • 本文向大家介绍如果将axios异步请求同步化处理?相关面试题,主要包含被问及如果将axios异步请求同步化处理?时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 我有一个提供标准扩展点的JavaScript小部件。其中之一是功能。它应返回以防止创建项目。 我已经使用jQuery在此函数中添加了Ajax调用: 但是我想防止我的小部件创建该项目,因此我应该在母函数中返回,而不是在回调中返回。有没有一种方法可以使用jQuery或任何其他浏览器内API执行同步AJAX请求? 问题答案: 从jQuery文档中:您将异步选项指定为false,以获取同步Aj

  • 当生成消息到Kafka时,您可以得到两种错误:可检索和不可检索。在处理它们时,你应该如何区分它们? 我希望异步生成记录,将接收到不可重试异常的记录保存在另一个主题(或HBase)中,并让生产者为我处理所有接收到可重试异常的记录(最多尝试次数,当它最终到达时,会成为第一批异常之一)。 我的问题是:尽管有,但生产者是否仍会自行处理可检索的异常?因为在接口回调中说: 可重试异常(暂时的,可通过增加#.重

  • 本文向大家介绍PHP ajax 异步执行不等待执行结果的处理方法,包括了PHP ajax 异步执行不等待执行结果的处理方法的使用技巧和注意事项,需要的朋友参考一下 短地址生成应用中,要根据长地址生成网页快照,这个生成时间非瞬发,不可预估。 所以前台方面采用的方案一般为先展示生成的短地址,再定期AJAX轮查网页快照是否生成完毕。 So,PHP代码这里做了如下处理: 前台Js的ajax脚本: 回调函数