кукольник без головы: ложное время ожидания, правда работает

#puppeteer #google-chrome-headless

#кукловод #google-chrome-без головы

Вопрос:

Каковы некоторые причины различий между headless = true и headless = false? Обратите внимание, что это на Mac 10.14.4

Окружающая среда

 $ node -v
v11.14.0

$ npm v puppeteer | grep version
puppeteer@1.14.0 | Apache-2.0 | deps: 8 | versions: 613

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.4
BuildVersion:   18E226
  

Код (безголовый true)

 const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({ headless: true, args: ["--fast-start", "--disable-extensions", "--no-sandbox"],
        executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' });
    const page = await browser.newPage();
    await page.goto('http://www.criis.com/cgi-bin/doc_search.cgi?COUNTY=sanfranciscoamp;YEARSEGMENT=currentamp;TAB=3');

    await page.select('select[name="DOC_TYPE"]', '002'); 
    await page.$eval('input[id="dateboxA"]', el => el.value = '04012019');
    await page.$eval('input[id="dateboxB"]', el => el.value = '04202019');
    await page.click('input[type="submit"]');

    const resp = await page.waitForNavigation(); // wait for search results page to load
    console.log(resp);
    await browser.close();    
})();
  

Сообщение об ошибке

 $ node headless.js 
(node:27750) UnhandledPromiseRejectionWarning: TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded
    at Promise.then (/Users/ag/node_modules/puppeteer/lib/LifecycleWatcher.js:143:21)
  -- ASYNC --
    at Frame.<anonymous> (/Users/ag/node_modules/puppeteer/lib/helper.js:110:27)
    at Page.waitForNavigation (/Users/ag/node_modules/puppeteer/lib/Page.js:676:49)
    at Page.<anonymous> (/Users/ag/node_modules/puppeteer/lib/helper.js:111:23)
    at /Users/ag/github/real_estate/sf/headless.js:14:26
    at processTicksAndRejections (internal/process/task_queues.js:86:5)
(node:27750) 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:27750) [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.
  

Вывод при безголовом значении false

 $ node headless.js 
Response {
  _client:
   CDPSession {
     _events:
      [Object: null prototype] {...
  

Комментарии:

1. Не удается воспроизвести проблему (в Windows), работает в безголовом и безголовом режиме для меня.

2. @ThomasDondorf Спасибо — может быть, это просто Mac. Я обновил среду, которая у меня есть.