Пример кластера Puppeteer Ошибка: невозможно получить страницу браузера - PullRequest
3 голосов
/ 18 мая 2019

Я использую этот пример в puppeteer-cluster docs

Я запускаю это на узле v10.15.3 Я попытался передать свойства без головы и slowMo в параметры кукловода.

Я ожидаю, что код выйдет из системы и создаст скриншот страницы, однако произойдет загрузка нескольких экземпляров 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)

Ответы [ 2 ]

2 голосов
/ 18 мая 2019

Эта ошибка возникает, когда библиотека не может создать новую страницу браузера.Ошибка выдается здесь после нескольких попыток открытия нового контекста / страницы / браузера (в зависимости от ваших настроек).

Журнал отладки

Чтобы получить дополнительную информацию о причинах ошибки, вы можете проверить журнал отладки .Это запустит приложение в режиме отладки и запишет дополнительную информацию.Для входа в режим отладки необходимо запустить приложение с переменной среды DEBUG='puppeteer-cluster:*':

# Linux
DEBUG='puppeteer-cluster:*' node application.js
# Windows Powershell
$env:DEBUG='puppeteer-cluster:*';node application.js

Проблема

В вашем случае отображаются журналы отладки (скопировано изВаш комментарий выше):

puppeteer-cluster: Worker Ошибка при получении страницы браузера (попробуйте: 9), сообщение: this.browser.createIncognitoBrowserContext не является функцией + 660ms

Это означает, что нет createIncognitoBrowserContext, который библиотека может использовать для создания нового контекста.Как вы уже подтвердили, это так, потому что вы используете старую установку кукловода.Чтобы использовать настройку { concurrency: Cluster.CONCURRENCY_CONTEXT }, необходимо использовать как минимум версию 1.5.0 , как это было при вводе контекстов.

Fix

Чтобы устранить проблему, обновите установку кукловода:

npm install puppeteer@latest
1 голос
/ 18 мая 2019

Проблема заключалась в том, что я использовал пул кукловода перед кластером кукловодов, который использует более старую версию кукловода.

Я удалил пул кукловодов и установил кукловода, и он работает, как и ожидалось

...