Кукольник иногда выдает «UnhandledPromiseRejectionWarning: TimeoutError: Превышено время ожидания навигации» - PullRequest
0 голосов
/ 25 июня 2019

Я тестирую Headless Chrome с Puppeteer, поэтому я читаю документы и запускаю этот код *:

const puppeteer = require('puppeteer');

(async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.github.com', {waitUntil: 'networkidle2'});
    await page.screenshot({ path: 'screenshot.png' });

    await browser.close();
})();

(* Фрагмент из Использование документов ).

Я изменил "example.com", потому что он отлично работает и пытается с другими сайтами, но с помощью скрипта "github.com" возвращает исключение тайм-аута в строке await page.goto():

(node:7840) UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded
    at Promise.then (C:\_test\headless\node_modules\puppeteer\lib\LifecycleWatcher.js:142:21)
    at <anonymous>
  -- ASYNC --
    at Frame.<anonymous> (C:\_test\headless\node_modules\puppeteer\lib\helper.js:111:15)
    at Page.goto (C:\_test\headless\node_modules\puppeteer\lib\Page.js:629:49)
    at Page.<anonymous> (C:\_test\headless\node_modules\puppeteer\lib\helper.js:112:23)
    at C:\_test\headless\index.js:7:16
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
(node:7840) 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: 1)
(node:7840) [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.

Если я захожу на github.com со своим обычным браузером, подключается в обычное время, поэтому мое интернет-соединение не является проблемой.

Я добавил следующую строку, и код работает нормально через две минуты :

page.setDefaultNavigationTimeout(0);

Но если я установлю puppeteer.launch({headless:false}), то код отлично работает всего за несколько секунд

Я запускаю тест под:

  • Windows 7 Professional SP1
  • Узел 8.11.1
  • Кукольник 1.18.0
  • Puppeteer Core 1.18.0

1 Ответ

0 голосов
/ 25 июня 2019

Иногда серверы не отвечают на запросы без головы ( puppeteer # 2963 ).
Чтобы убедиться в этом, я бы попробовал запустить код в режиме отладки:

DEBUG=*session node your-test-file.js
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...