Могу ли я возобновить соединение после получения такой ошибки
UnhandledPromiseRejectionWarning:
TimeoutError: Navigation Timeout
Exceeded: 1000ms exceeded
пример:
let arg = [] //array with urls
await page.goto(...args, {waitUntil: 'load', timeout: 1000 });
или единственный выход - это тайм-аут установки?
Если Вы хотите сделать запрос ко всем 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);
});
Чтобы ответить на оригинальный вопрос:
Нет, вы не можете возобновить соединение после истечения времени 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' }
так как это значение по умолчанию.
Надеюсь это поможет.
Я полагаю, что ваша проблема проистекает из аргумента, который вы предоставили методу puppeteer
goto
:
https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagegotourl-options
Когда вы вызываете goto
он ожидает string
url, а не Array<string>
.