【问题标题】:Puppeteer cluster example throwing Error: Unable to get browser pagePuppeteer 集群示例抛出错误:无法获取浏览器页面
【发布时间】:2019-05-18 17:43:54
【问题描述】:

我在 puppeteer-cluster 文档中使用了这个示例

我在节点 v10.15.3 上运行它,我尝试将 headless 属性和 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)

【问题讨论】:

  • 这里的库的作者。当新页面的打开多次失败时会发生这种情况。大多数时候,还有一些其他问题,例如内存/磁盘/CPU 限制,可能会导致浏览器崩溃。可以加debugging logs吗?然后我可以准确地告诉你为什么会发生错误。
  • 感谢您这么快回来! pastebin.com/9d3JB3aA

标签: javascript node.js puppeteer puppeteer-cluster


【解决方案1】:

当库无法创建新的浏览器页面时会发生此错误。在多次尝试打开新的上下文/页面/浏览器(取决于您的设置)后,将引发错误here

调试日志

要获取有关导致错误的原因的更多信息,您可以查看debugging log。这将在调试模式下启动应用程序并将记录更多信息。要进入调试模式,您需要使用环境变量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 },您必须至少使用version 1.5.0,就像在引入上下文时那样。

修复

要解决此问题,请更新您的 puppeteer 安装:

npm install puppeteer@latest

【讨论】:

    【解决方案2】:

    问题是我在 puppeteer-cluster 之前使用了 puppeteer-pool,而 puppeteer-cluster 使用的是旧版本的 puppeteer。

    我删除了 puppeteer-pool 并安装了 puppeteer,它按预期工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      相关资源
      最近更新 更多