我正在尝试实现同步呼叫:
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):目标已关闭。 在Promise(C:\ ImageServer \ node_modules \ puppeteer \ lib \ Connection.js:74:56) 在新的Promise() 在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(内部/进程/next_tick.js:68:7) (节点:22140)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:1) (节点:22140)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。
我该如何解决?
答案 0 :(得分:1)
问题是您在browser.newPage
之后立即关闭浏览器。您应该将browser.close()
移至then
的{{1}}。
screenshot