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

使用Puppeteer爬取Facebook活动页面全部日期的技术问询

解决方法

核心问题

你用document.querySelector()只会返回第一个匹配的元素,所以只能拿到第一个日期。要获取所有日期,需要用document.querySelectorAll()获取所有匹配元素,再批量提取文本。

修改后的Puppeteer代码

const puppeteer = require('puppeteer');

const url = "https://www.facebook.com/events/search?q=Parties&sde=AbrQ9KopLfqYT7heXVVCxznkZYxRr9hU1JA4cdLbJhjgs56yyeHW3e833A9dGP1WlEHOyagjWyFL9Y79gw-Ko1iVuJCILVkpVsHkmSbBFb3SEA&filters=eyJmaWx0ZXJfZXZlbnRzX2NhdGVnb3J5OjAiOiJ7XCJuYW1lXCI6XCJmaWx0ZXJfZXZlbnRzX2NhdGVnb3J5XCIsXCJhcmdzXCI6XCIxODIxOTQ4MjYxNDA0NDgxXCJ9IiwiZmlsdGVyX2V2ZW50c19jYXRlZ29yeToxIjoie1wibmFtZVwiOlwiZmlsdGVyX2V2ZW50c19jYXRlZ29yeVwiLFwiYXJnc1wiOlwiXCJ9IiwicnBfZXZlbnRzX2xvY2F0aW9uOjAiOiJ7XCJuYW1lXCI6XCJmaWx0ZXJfZXZlbnRzX2xvY2F0aW9uXCIsXCJhcmdzXCI6XCIxMDg1NjA0MDI1MDgxNDFcIn0ifQ%3D%3D";

(async () => {
    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();
    await page.setViewport({ width: 1200, height: 1000 });
    await page.goto(url, { waitUntil: "networkidle2" });

    // 等待目标元素加载完成,避免因DOM未渲染导致拿不到数据
    await page.waitForSelector('.x193iq5w.xeuugli.x13faqbe.x1vvkbs.x10flsy6.x1nxh6w3.x1sibtaa.x1s688f.xzsf02u');

    let allDates = await page.evaluate(() => {
        // 获取所有匹配的日期元素
        const dateElements = document.querySelectorAll('.x193iq5w.xeuugli.x13faqbe.x1vvkbs.x10flsy6.x1nxh6w3.x1sibtaa.x1s688f.xzsf02u');
        // 转换为数组并提取每个元素的文本内容
        return Array.from(dateElements).map(el => el.innerText.trim());
    });

    console.log('所有活动日期:');
    console.log(allDates);

    await browser.close();
})();

关键修改点

  • 替换document.querySelector()为document.querySelectorAll(),获取所有匹配的日期元素集合
  • 用Array.from()把元素集合转为数组,再通过map()批量提取每个元素的innerText
  • 添加page.waitForSelector()等待元素加载,确保DOM渲染完成后再提取数据

额外提示

如果页面是滚动加载更多活动(下滑才会加载新的活动卡片),你需要添加滚动逻辑,比如循环滚动页面直到没有新内容加载,再提取所有日期。示例滚动逻辑:

// 滚动到页面底部加载更多内容
async function autoScroll(page) {
    await page.evaluate(async () => {
        await new Promise((resolve) => {
            let totalHeight = 0;
            let distance = 1000;
            let timer = setInterval(() => {
                let scrollHeight = document.body.scrollHeight;
                window.scrollBy(0, distance);
                totalHeight += distance;

                if (totalHeight >= scrollHeight) {
                    clearInterval(timer);
                    resolve();
                }
            }, 1000);
        });
    });
}

// 在page.goto之后调用:
await autoScroll(page);

内容的提问来源于stack exchange,提问作者Swanito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:05:23