Браузер отключается после инициализации

Вот фрагмент кода в моем приложении node 8.12.0:

var browser, page;

//launch browser 
(async () => {
    browser = await puppeteer.launch({headless: false});
    page = await browser.newPage();   
})();

//start cron job  
cron.schedule('* * * * *', () => {
  (async () => {
    await page.goto('https://www.mysitedotcom/admin/');  <== cause error

    //doing something with web page and db
    ........
  )}();
}); // cron.schedule

(async() => {
  browser.close();
})();

Задание cron запускается каждую минуту. Веб-страница выше не была открыта (goto не работал), и вот ошибка:

(node:3232) UnhandledPromiseRejectionWarning: Error: Navigation failed because browser has disconnected!
    at Connection.NavigatorWatcher._eventListeners.helper.addEventListener (C:\d\code\js\wbot\node_modules\puppeteer\lib\FrameManager.js:1146:117)

Запуск browser & page намеренно исключен из cron.schedule, поэтому однократное создание browser будет работать для cron.schedule, пока существует сеанс. Но проблема в том, что browser каким-то образом был disconnected, когда доходит до cron.schedule. Я не понимаю, почему. Что мне здесь не хватает?

Можете добавить еще немного кода? Вы запускаете кукурузу каждую секунду / минуту? Почему это асинхронная функция внутри другой функции?

Md. Abu Taher 26.10.2018 12:34
Ma Abu Taher, добавлено более подробное объяснение кода.
user938363 26.10.2018 20:01
1
2
2 881
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Из-за асинхронного характера эти строки закрывают браузер практически мгновенно. Удалите их или переместите в другое место, если вам нужно, чтобы браузер оставался открытым.

(async() => {
  browser.close();
})();

Я удалил это полностью. Кажется, что browser отключается от функции async. просто переместил cron.schedule внутрь async при запуске браузера и посмотрите, как это работает.

user938363 26.10.2018 21:51

вы пробовали await browser.close(); в конце?

Это дождется полного закрытия браузера.

Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением. - Из обзора

Dan 16.12.2020 15:09

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

Nico Haase 16.12.2020 16:32

Другие вопросы по теме