EventListener все еще включен после закрытия браузера вручную? (Кукольник) - PullRequest
1 голос
/ 10 июля 2020

Я заметил, что когда вы вручную закрываете браузер, запущенный с помощью Puppeteer, он продолжает занимать память. Я одиннадцать раз пытался запустить экземпляр браузера, а затем закрыть его вручную (щелкнув крестик в верхнем углу интерфейса браузера), но с одиннадцатой попытки я получил предупреждение

(node:20424) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:20424) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:20424) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:20424) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:20424) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:20424) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:20424) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:20424) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added to [process]. Use emitter.setMaxListeners() to increase limit

Я пытался управлять эта проблема заключается в уничтожении дочернего процесса браузера (идентифицируемого его pid) при возникновении события «отключено», но оно не работает:

            browser = await puppeteer.launch({
                headless:false,
                devtools:false,       
            })
            page = (await browser.pages())[0];
            const browserPid = browser.process().pid;

            browser.on('disconnected', () => {
                process.kill(browserPid)
            })

Любая помощь?

1 Ответ

0 голосов
/ 10 июля 2020

Вы можете установить максимальное количество слушателей, добавив значение Infinity (или любое другое число по вашему выбору) к process.setMaxListeners() перед основным скриптом кукловода:

process.setMaxListeners(Infinity)

В общем, вы можете избежать запуска такого количества chromium - если это позволяет ваш вариант использования - путем повторного использования одного и того же экземпляра браузера. Вы можете создать конечную точку websocket с помощью browser.wsEndpoint, а затем вместо новых puppeteer.launch -s вы можете puppeteer.connect в существующую wsEndpoint, используя параметр browserWSEndpoint.

Пример:

  const browser = await puppeteer.launch({ headless: true })
  const browserWSEndpoint = await browser.wsEndpoint()
  [...]

  const browser2 = await puppeteer.connect({ browserWSEndpoint })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...