Nodejs / puppeteer - ошибка тайм-аута навигации

1

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

UnhandledPromiseRejectionWarning:    
TimeoutError: Navigation Timeout    
Exceeded: 1000ms exceeded

пример:

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

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

Теги:
puppeteer

3 ответа

0
Лучший ответ

Если Вы хотите сделать запрос ко всем 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

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

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

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

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

Первый:

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

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

Смотрите документы.

Во- вторых:

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

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

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

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню