运行Puppeteer时出现UnhandledPromiseRejectionWarning警告?

时间:2018-10-13 22:28:28

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

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

警告:

  

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

     

(节点:26771)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止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

1 个答案:

答案 0 :(得分:1)

您需要await page.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();
})();