Бесконечный цикл (специально) с использованием кластера кукловодов

#javascript #for-loop #puppeteer #infinite-loop #puppeteer-cluster

#javascript #для цикла #кукловод #бесконечный цикл #кукловод-кластер

Вопрос:

Я очень новичок в puppeteer-cluster. Моя цель — бесконечно очищать список из 100 сайтов, поэтому, как только я дойду до 100-й ссылки, скрипт запустится снова (в идеале, повторно используя тот же экземпляр кластера). Есть ли лучший способ или правильный способ сделать это? Я подумал, что было бы проще просто создать бесконечный цикл (и вращать элементы) специально. Любые советы будут оценены.

Вот мой код:

 (async () => {
    const cluster = await Cluster.launch({
        concurrency: Cluster.CONCURRENCY_CONTEXT,
        maxConcurrency: 20,
        monitor: true
    });

    // Extracts document.title of the crawled pages
    await cluster.task(async ({ page, data: url }) => {
        await page.goto(url, { waitUntil: 'domcontentloaded' });
        const pageTitle = await page.evaluate(() => document.title);
        console.log(pageTitle);
    });

    // In case of problems, log them
    cluster.on('taskerror', (err, data) => {
        console.log(`  Error crawling ${data}: ${err.message}`);
    });

    while (true) {
        await new Promise(resolve => setTimeout(crawl, 5000));
    }

    async function crawl() {
        for (let i = 0; i < sites.length; i  ) {
            const site = sites[i];

            site["product_urls"].forEach(async (url) => {
                await cluster.execute(url);
            });
        }

        await cluster.idle();
    }
})();
 

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

1. Я думаю, что это лучше подходит для обмена стеком проверки кода .

2. При этом, просто проверьте, равен ли i сайтам. длина — 1 и запустить crawl() снова?, нет необходимости запускать setTimeout?

Ответ №1:

 for (;;) {}
 

Даст вам бесконечный цикл без каких-либо проблем, связанных с такими вещами, как ESLint, или предупреждениями о «недоступном коде».

Тем не менее, возможно, не помешает установить резервное условие, чтобы ваш код мог безопасно завершиться, если это необходимо