运行 Puppeteer 时出现 UnhandledPromiseRejectionWarning?
UnhandledPromiseRejectionWarning when running Puppeteer?
为什么我会收到以下警告,我该如何摆脱它们?
警告:
(node:26771) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Protocol error (Runtime.callFunctionOn): Target closed.
(node:26771) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zeroexit code.
代码:
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
你需要await
page.evaluate()
,因为它returns一个承诺:
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();
})();
为什么我会收到以下警告,我该如何摆脱它们?
警告:
(node:26771) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Protocol error (Runtime.callFunctionOn): Target closed.
(node:26771) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zeroexit code.
代码:
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
你需要await
page.evaluate()
,因为它returns一个承诺:
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();
})();