Node.js “木偶演员投掷”;协议错误(IO.read):目标已关闭;时不时

Node.js “木偶演员投掷”;协议错误(IO.read):目标已关闭;时不时,node.js,puppeteer,Node.js,Puppeteer,这让我发疯。。。我有以下代码: // Load a PUG template const template = await loadTemplateRoute(pdfProps.layout); // Generate HTML const html = template(pdfProps); // requirement for puppeteer to work locally, if using locally const executablePath = process.env.E

这让我发疯。。。我有以下代码:

// Load a PUG template
const template = await loadTemplateRoute(pdfProps.layout);

// Generate HTML 
const html = template(pdfProps);

// requirement for puppeteer to work locally, if using locally
const executablePath = process.env.EXECUTABLE_PATH || await chromium.executablePath;
console.log('executable path', executablePath);

// These are needed to run on WSL
chromium.args.push(['--disable-gpu', '--single-process']);

console.log('1');

const browser = await puppeteer.launch({
  args: chromium.args,
  defaultViewport: chromium.defaultViewport,
  executablePath,
  headless: true,
  ignoreHTTPSErrors: true
});

console.log('2');

const page = await browser.newPage();

console.log('3');

// eslint-disable-next-line quote-props
await page.setContent(html, { 'waitUntil': 'networkidle2' });

console.log('4');

// here we can insert customizable features in the future using JSONB stored formats
const pdf = await page.pdf({
  format: 'A4',
  printBackground: true,
  margin: {
    top: '1cm',
    right: '1cm',
    bottom: '1cm',
    left: '1cm'
  }
});
await page.close();
  
console.log('5');
await browser.close();
console.log('6');
return pdf;
运行这个程序可以得到我想要的PDF,但是十次只能得到一次。其他时候,我在
console.log('4')
之后得到:

我在WSL Ubuntu上运行它,但在Mac上运行它也会出现错误(但不太频繁)

如果我在两次尝试之间等待5分钟,效果似乎会更好,但列出的进程(
ps-ef
)没有显示任何正在运行/挂起的内容

编辑:注销
/node\u modules/puppeter core/lib/Connection.js:182:56
中发生的事情,给出:

send(); Page.printToPDF {
  transferMode: 'ReturnAsStream',
  landscape: false,
  displayHeaderFooter: false,
  headerTemplate: '',
  footerTemplate: '',
  printBackground: true,
  scale: 1,
  paperWidth: 8.27,
  paperHeight: 11.7,
  marginTop: 0.39375,
  marginBottom: 0.39375,
  marginLeft: 0.39375,
  marginRight: 0.39375,
  pageRanges: '',
  preferCSSPageSize: false
}
send(); IO.read { handle: '1' }
send(); IO.read { handle: '1' }

Page.printToPDF
工作正常,第一个
IO.read
也工作正常,而第二个
IO.read
抛出错误…

在尝试了一系列操作后,我开始怀疑外部源,因为它在使用简单模板时工作正常

修改模板以不加载任何外部CSS,而是将所有CSS放在
标记中,并将所有图像“预解析”到base64(
)它不再发生


显然,一些资源正在困扰着我……

在尝试了一系列事情之后,我开始怀疑外部资源,因为它在简单的模板中工作得很好

修改模板以不加载任何外部CSS,而是将所有CSS放在
标记中,并将所有图像“预解析”到base64(
)它不再发生

很明显,一些资源正在困扰着我

Navigation failed because browser has disconnected!
    at CDPSession.<anonymous> (.../node_modules/puppeteer-core/lib/LifecycleWatcher.js:46:107)
    at CDPSession.emit (events.js:223:5)
    at CDPSession.EventEmitter.emit (domain.js:475:20)
    at CDPSession._onClosed (.../node_modules/puppeteer-core/lib/Connection.js:215:10)
    at Connection._onClose (.../node_modules/puppeteer-core/lib/Connection.js:138:15)
    at WebSocket.<anonymous> (.../node_modules/puppeteer-core/lib/WebSocketTransport.js:48:22)
    at WebSocket.onClose (.../node_modules/puppeteer-core/node_modules/ws/lib/event-target.js:124:16)
    at WebSocket.emit (events.js:223:5)
    at WebSocket.EventEmitter.emit (domain.js:475:20)
    at WebSocket.emitClose (.../node_modules/puppeteer-core/node_modules/ws/lib/websocket.js:191:10)
    at Socket.socketOnClose (.../node_modules/puppeteer-core/node_modules/ws/lib/websocket.js:850:15)
    at Socket.emit (events.js:223:5)
    at Socket.EventEmitter.emit (domain.js:475:20)
    at TCP.<anonymous> (net.js:664:12)
send(); Page.printToPDF {
  transferMode: 'ReturnAsStream',
  landscape: false,
  displayHeaderFooter: false,
  headerTemplate: '',
  footerTemplate: '',
  printBackground: true,
  scale: 1,
  paperWidth: 8.27,
  paperHeight: 11.7,
  marginTop: 0.39375,
  marginBottom: 0.39375,
  marginLeft: 0.39375,
  marginRight: 0.39375,
  pageRanges: '',
  preferCSSPageSize: false
}
send(); IO.read { handle: '1' }
send(); IO.read { handle: '1' }