You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Puppeteer代码将多页符合折扣要求的商品链接汇总到单个数组

修改后完整代码及说明

本次修改核心调整如下:

  • 新增全局汇总数组all_links存储所有分页符合要求的商品链接
  • 修复原代码遗漏第一页商品数据的问题:原逻辑进入分页循环后直接点击下一页,会跳过初始加载的第一页内容
  • 每页筛选完成后将当前页符合要求的链接批量推入汇总数组
  • 分页遍历结束后自动关闭浏览器,返回最终汇总数组
const puppeteer = require('puppeteer')
const minDiscount = 20;

async function getLinks() {
    const browser = await puppeteer.launch({
        headless: false,
        defaultViewport: null,
    });
    const page = await browser.newPage();
    // 初始化汇总数组
    const all_links = [];

    const url = 'https://www.mytoys.de/spielzeug-spiele/holz/';
    await page.goto(url);

    // 封装单页商品爬取逻辑,复用给所有分页
    const scrapeCurrentPage = async () => {
        await page.waitForTimeout(1500);
        const products = await page.$$('.prod-grid.js-prod-grid .prod-grid__item.js-prod-grid_item');
        const proms = await Promise.allSettled(
            products.map(async (prod) => {
                const disc = await prod.$$eval(
                    '.prod-grid.js-prod-grid .prod-flag.prod-flag-sale',
                    (discount) =>
                        discount.map((discItem) =>
                            discItem.innerText.replace(/[^0-9.]/g, '').replace(/\D+/g,'0')
                        )
                );
                if (disc.length > 0) {
                    const discountInt = parseInt(disc[0], 10);
                    if (discountInt >= minDiscount) {
                        const link = await prod.$$eval('.prod-grid.js-prod-grid .prod-tile__link.js-prodlink', (allAs) => allAs.map((a) => a.href));
                        if (link.length > 0) {
                            return link[0];
                        }
                    }
                }
                return null;
            })
        );
        const bulkArray = proms.map((item) => {
            if (item.status === 'fulfilled') return item.value;
        });
        const endArray = bulkArray.filter(item => item !== null);
        // 当前页结果推入汇总数组
        all_links.push(...endArray);
        console.log('当前页已爬取符合条件链接数:', endArray.length);
    }

    // 先爬第一页
    await scrapeCurrentPage();

    // 遍历后续分页
    while(await page.$(".pager__link--next")){
        await page.waitForSelector(".pager__link--next")
        await page.waitForTimeout(1000);
        await page.click('.pager__link--next')
        // 爬当前新加载的分页
        await scrapeCurrentPage();
    }

    // 关闭浏览器
    await browser.close();
    // 返回汇总结果
    return all_links;
}
    
// 调用函数并打印最终汇总结果
getLinks().then(res => {
    console.log('所有分页符合条件的总链接数:', res.length);
    console.log('汇总链接列表:', res);
});

内容的提问来源于stack exchange,提问作者Faster than a snail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:24:04