运行 Puppeteer 时出现 UnhandledPromiseRejectionWarning?

use*_*776 3 javascript node.js headless-browser google-chrome-devtools puppeteer

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

警告:

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

(节点:26771)[DEP0018] 弃用警告:不推荐使用未处理的承诺拒绝。将来,未处理的承诺拒绝将使用非零退出代码终止 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();
})();
Run Code Online (Sandbox Code Playgroud)

环境:

  • macOS 高山脉
  • 节点 v8.5.0
  • 傀儡师:1.9.0

Gra*_*ler 10

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

var output = await page.evaluate(() => {
  return;
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

'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();
})();
Run Code Online (Sandbox Code Playgroud)

  • 如何继续在 unhandledRejection 上运行脚本? (2认同)