【问题标题】:UnhandledPromiseRejectionWarning when running Puppeteer?运行 Puppeteer 时出现 UnhandledPromiseRejectionWarning?
【发布时间】:2018-10-13 22:28:28
【问题描述】:

为什么我会收到以下警告,我该如何消除它们?

警告:

(节点:26771)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):错误:协议错误(Runtime.callFunctionOn):目标关闭。

(node:26771) [DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非 zeroexit 代码终止 Node.js 进程。

代码:

const puppeteer = require("puppeteer");

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto("https://dn.se", { waitUntil: "domcontentloaded" });
    var output = page.evaluate(() => {
        return;
    });
    await browser.close();
})();

环境:

  • macOS High Sierra
  • 节点 v8.5.0
  • 傀儡师:1.9.0

【问题讨论】:

    标签: javascript node.js google-chrome-devtools puppeteer headless-browser


    【解决方案1】:

    你需要awaitpage.evaluate(),因为它返回一个承诺:

    var output = await page.evaluate(() => {
      return;
    });
    

    确保您使用process.on('unhandledRejection') 来侦听未处理的承诺拒绝,并在发生此类事件时正常关闭浏览器:

    process.on('unhandledRejection', (reason, p) => {
      console.error('Unhandled Rejection at: Promise', p, 'reason:', reason);
      browser.close();
    });
    

    您的最终代码应如下所示:

    'use strict';
    
    const puppeteer = require('puppeteer');
    
    (async () => {
      const browser = await puppeteer.launch();
      const page = await browser.newPage();
    
      process.on('unhandledRejection', (reason, p) => {
        console.error('Unhandled Rejection at: Promise', p, 'reason:', reason);
        browser.close();
      });
    
      await page.goto('https://dn.se', {
        waitUntil: 'domcontentloaded',
      });
    
      var output = await page.evaluate(() => {
        return;
      });
    
      await browser.close();
    })();
    

    【讨论】:

    • 如何在 unhandledRejection 上继续运行脚本?
    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2019-08-17
    相关资源
    最近更新 更多