Обход нескольких URL-адресов в цикле с помощью puppeteer
Я
urls = ['url','url','url'...]
это то, что я делаю
urls.map(async (url)=>{
await page.goto(`${url}`);
await page.waitForNavigation({ waitUntil: 'networkidle' });
})
это, похоже, не ждет загрузки страницы и довольно быстро посещает все URL-адреса(я даже пытался использовать страницу.инструкция waitfor )
просто хотел знать, делаю ли я что-то принципиально неправильно или этот тип функциональности не рекомендуется/поддерживается
1 ответов
map
, forEach
, reduce
и т. д. не ждет асинхронной операции внутри них, прежде чем они перейдут к следующему элементу итератора, над которым они повторяют.
существует несколько способов синхронного прохождения каждого элемента итератора при выполнении асинхронной операции, но самым простым в этом случае, я думаю, было бы просто использовать обычный for
оператор, который ждет завершения операции.
const urls = [...]
for (let i = 0; i < urls.length; i++) {
const url = urls[i];
await page.goto(`${url}`);
await page.waitForNavigation({ waitUntil: 'networkidle' });
}
Это посетите один адрес за другим, как вы ожидаете. Если вам интересно повторять последовательно с помощью await/async, вы можете взглянуть на этот ответ:https://stackoverflow.com/a/24586168/791691