如何处理同步执行时的 puppeteer 异常
How to handle puppeteer exception on synchronous execution
我正在尝试实现同步调用:
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):目标已关闭。
在承诺 (C:\ImageServer\node_modules\puppeteer\lib\Connection.js:74:56)
在新的承诺 ()
在 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\Browser.js:367:26)
在 Browser.newPage(C:\ImageServer\node_modules\puppeteer\lib\Browser.js:166:33)
在浏览器。 (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)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是在没有 catch 块的情况下在异步函数内部抛出,要么是因为拒绝了一个没有用 .catch() 处理的承诺。 (拒绝编号:1)
(节点:22140)[DEP0018] DeprecationWarning:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将以非零退出代码终止 Node.js 进程。
我该如何解决这个问题?
问题是您在 browser.newPage
后立即关闭浏览器。您应该将 browser.close()
移至 screenshot
.
的 then
page
.screenshot({
path: path,
clip: {
x: 50,
y: 50,
width: 100,
height: 100
},
omitBackground: true
})
.then(() => browser.close());
我正在尝试实现同步调用:
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):目标已关闭。 在承诺 (C:\ImageServer\node_modules\puppeteer\lib\Connection.js:74:56) 在新的承诺 () 在 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\Browser.js:367:26) 在 Browser.newPage(C:\ImageServer\node_modules\puppeteer\lib\Browser.js:166:33) 在浏览器。 (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)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是在没有 catch 块的情况下在异步函数内部抛出,要么是因为拒绝了一个没有用 .catch() 处理的承诺。 (拒绝编号:1) (节点:22140)[DEP0018] DeprecationWarning:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将以非零退出代码终止 Node.js 进程。
我该如何解决这个问题?
问题是您在 browser.newPage
后立即关闭浏览器。您应该将 browser.close()
移至 screenshot
.
then
page
.screenshot({
path: path,
clip: {
x: 50,
y: 50,
width: 100,
height: 100
},
omitBackground: true
})
.then(() => browser.close());