javascript - Puppeteer 集群示例抛出错误:无法获取浏览器页面
问题描述
我在puppeteer-cluster文档中使用这个例子
我在节点 v10.15.3 上运行它我试图将无头属性和 slowMo 传递给 puppeteer 选项。
我希望代码能够注销并创建页面的屏幕截图,但是,会发生几个 chrome 实例启动,它们不加载任何页面,然后控制台挂起并出现以下错误:
(node:30826) UnhandledPromiseRejectionWarning: Error: Unable to get browser page
at Worker.<anonymous> (/Users/Starlord/Code/oppose/node_modules/puppeteer-cluster/dist/Worker.js:43:31)
at Generator.next (<anonymous>)
at fulfilled (/Users/Starlord/Code/oppose/node_modules/puppeteer-cluster/dist/Worker.js:4:58)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:30826) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 21)
(node:30826) [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-zero exit code.
(node:30826) UnhandledPromiseRejectionWarning: Error: Unable to get browser page
at Worker.<anonymous> (/Users/Starlord/Code/oppose/node_modules/puppeteer-cluster/dist/Worker.js:43:31)
at Generator.next (<anonymous>)
at fulfilled (/Users/Starlord/Code/oppose/node_modules/puppeteer-cluster/dist/Worker.js:4:58)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:30826) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 22)
^Cinternal/process/per_thread.js:198
throw errnoException(err, 'kill');
^
Error: kill ESRCH
at process.kill (internal/process/per_thread.js:198:13)
at process.killChrome (/Users/Starlord/Code/oppose/node_modules/puppeteer/lib/Launcher.js:110:17)
at process.emit (events.js:189:13)
解决方案
当库无法创建新的浏览器页面时会发生此错误。多次尝试打开新的上下文/页面/浏览器(取决于您的设置)后,此处会引发错误。
调试日志
要获取有关导致错误的原因的更多信息,您可以查看调试日志。这将在调试模式下启动应用程序并将记录更多信息。要进入调试模式,您需要使用环境变量启动应用程序DEBUG='puppeteer-cluster:*'
:
# Linux
DEBUG='puppeteer-cluster:*' node application.js
# Windows Powershell
$env:DEBUG='puppeteer-cluster:*';node application.js
问题
在您的情况下,调试日志显示(从您上面的评论中复制):
puppeteer-cluster: Worker Error getting browser page (try: 9), message: this.browser.createIncognitoBrowserContext is not a function +660ms
这意味着,没有createIncognitoBrowserContext
库可以用来创建新的上下文。正如您已经确认的那样,情况就是这样,因为您使用的是旧的 puppeteer 安装。要使用该设置{ concurrency: Cluster.CONCURRENCY_CONTEXT }
,您必须至少使用1.5.0 版本,因为这是引入上下文时的版本。
使固定
要解决此问题,请更新您的 puppeteer 安装:
npm install puppeteer@latest
推荐阅读
- ios - 更新 iOS14 后 Flex 网络记录器无法正常工作
- r - 使用 dorng 包的可重复随机数
- node.js - 在默认日期和时间中存储错误的时区
- bash - 为什么我需要一个带有 pg_dump 的临时文件?
- c - 为什么周期性中断会有时间差异?
- ios - 如何使用 ObservedObject 作为 Picker 中的选择以及 SwiftUI 中的默认选择
- javascript - 联系表格提交电子邮件不发送
- javascript - 如何在 Node.js 上将函数从一个文件导出到另一个文件?
- javascript - 如何在提交 RobinHerbots / Inputmask 时取消屏蔽
- node.js - 尝试实现 NodeJS Gmail API 示例