Nodejs / puppeteer - ошибка тайм-аута навигации - PullRequest
0 голосов
/ 05 ноября 2018

Могу ли я возобновить соединение после получения такой ошибки

UnhandledPromiseRejectionWarning:    
TimeoutError: Navigation Timeout    
Exceeded: 1000ms exceeded

пример:

 let arg = [] //array with urls
 await page.goto(...args, {waitUntil: 'load', timeout: 1000 }); 

или единственный выход - это тайм-аут установки?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Чтобы ответить на оригинальный вопрос:

Нет, вы не можете возобновить соединение после истечения времени ожидания page.goto(). Вы можете обработать только исключение и, возможно, повторить попытку.

С другой стороны, если вы пытаетесь загрузить страницу,

Я предлагаю два изменения в вашем коде:

Первое:

page.goto() не принимает Array или Object в качестве первого аргумента, это должна быть строка в единственном числе, например:

page.goto('https://www.google.com').

См. Документы .

Второе:

Если загружаемая страница не очень проста, timeout из 1000 мс слишком мало По умолчанию кукловод имеет значение 30000 мс, поэтому я предлагаю либо использовать его, либо установить время ожидания не менее 5000 мс:

page.goto('https://www.google.com', { timeout: 5000 })

Также нет необходимости использовать { waitUntil: 'load' }, так как это значение по умолчанию.

Надеюсь, это поможет.

0 голосов
/ 06 ноября 2018

Если вы хотите сделать запрос ко всем URL-адресам в массиве args без остановки цикла, если один не удастся.

Итак, вот решение:

const async = require('async'); // npm i --save async

const urls = [... array of urls ...]; 
const execution = {
  total: urls.length,
  success: 0,
  failed: 0,
  results: []
};

async.eachLimit(
  urls, 
  10, 
  async (url, done) => {
    try {
      const data = await page.goto(url, {waitUntil: 'load', timeout: 1000});
      execution.success++;
      execution.results.push({url, data});
    }
    catch (error) {
      execution.failed++;
      execution.results.push({url, data: null, error: error.message});
    }
    finally {
      done();
    }
  },
  (errors) => {
    console.log('Finished:', execution);
  });
0 голосов
/ 06 ноября 2018

Я полагаю, что ваша проблема связана с аргументом, который вы указали для goto метода puppeteer:

https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagegotourl-options

Когда вы вызываете goto, он ожидает string url, а не Array<string>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...