avatar

mdo

Hello

  • 首页
  • 知识库
  • 归档
  • 标签
  • 关于
主页 AI 驱动型 Facebook 群组关键词监控 Chrome 浏览器插件
文章

AI 驱动型 Facebook 群组关键词监控 Chrome 浏览器插件

发表于 2026-07-24 更新于 2026-07- 24
作者 mdo
14~18 分钟 阅读

自己开发一个类似 One Stop Social 的 Facebook 群组关键词监控工具,最核心的难点在于 Facebook 官方 API 极其严格。由于 2018 年的数据隐私风波,官方彻底关闭了普通用户通过 API 读取他人群组帖子的权限。

因此,自主开发只能采用 “自动化模拟(爬虫/自动化脚本)” 路线。为了确保账号安全,最推荐的开发形态是 Chrome 浏览器扩展插件(Extension),因为它可以直接复用你网页端已登录的 Facebook Cookie,避开了复杂的登录滑块验证。

以下是完整的开发架构、核心代码实现及防封号策略。


🏗️ 技术栈推荐

  • 前端/外壳:HTML5, CSS3, JavaScript (Chrome Extension V3 规范)

  • 自动化核心:Puppeteer / Selenium (如果做成桌面软件) 或 纯 JS DOM 解析 (如果做成插件)

  • AI 文本分析(可选):调用 OpenAI API 或本地 Ollama 运行的轻量级大模型(如 Llama-3-8B)

  • 通知通道:Telegram Bot API, Slack Webhook 或 邮件服务 (如 Nodemailer)


💻 核心实现逻辑与代码示例

以 Chrome 插件 为例,其核心逻辑是:定时自动在后台打开群组页面 -> 滚动刷新获取最新 DOM -> 解析帖子文本 -> 匹配关键词/AI分析 -> 触发 Webhook 通知。

1. 声明清单文件 (manifest.json)

这是 Chrome 插件的配置文件,必须声明所需的权限。

json

{
  "manifest_version": 3,
  "name": "FB Group Keyword Monitor",
  "version": "1.0",
  "description": "监控 Facebook 群组关键词并发送通知",
  "permissions": [
    "tabs",
    "alarms",
    "storage",
    "notifications"
  ],
  "host_permissions": [
    "https://*://*"
  ],
  "background": {
    "service_worker": "background.js"
  }
}

请谨慎使用此类代码。

2. 定时任务与抓取调度 (background.js)

利用 Chrome 的 alarms 机制,每隔一段时间自动开页、执行脚本、关闭页面。

javascript

// 创建定时器:每 15 分钟执行一次
chrome.alarms.create("fbCheck", { periodInMinutes: 15 });

chrome.alarms.onAlarm.addListener((alarm) => {
  if (alarm.name === "fbCheck") {
    // 目标监控的群组 URL(从用户配置中读取)
    const targetGroupUrl = "https://facebook.com";
    
    // 静默创建一个新标签页打开群组
    chrome.tabs.create({ url: targetGroupUrl, active: false }, (tab) => {
      // 等待页面加载(例如 8 秒)后注入解析脚本
      setTimeout(() => {
        chrome.scripting.executeScript({
          target: { tabId: tab.id },
          files: ['content.js']
        });
      }, 8000);
    });
  }
});

// 监听 content.js 传回来的报警帖子数据
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.action === "keywordMatched") {
    // 1. 触发浏览器桌面通知
    chrome.notifications.create({
      type: "basic",
      iconUrl: "icon.png",
      title: "发现目标监控帖子!",
      message: `内容: ${request.text.substring(0, 50)}...`
    });

    // 2. 转发到你的微信/Telegram/Slack Webhook (示例:向网关发送 POST)
    fetch("https://your-webhook-server.com", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ text: request.text, url: request.url })
    });

    // 关闭刚刚打开的隐私标签页,不打扰用户
    chrome.tabs.remove(sender.tab.id);
  }
});

请谨慎使用此类代码。

3. 页面解析与关键词匹配 (content.js)

该脚本注入到 Facebook 网页中,提取帖子的文本和链接。

javascript

(function() {
  // 定义你要监控的关键词
  const KEYWORDS = ["需要推荐", "寻找木工", "求介绍", "预算"];
  
  // Facebook 动态加载的帖子容器选择器(注意:FB 的类名经常变动,需定期维护)
  // 提示:通常寻找带有 role="feed" 或带有 userContent 属性的 div
  const posts = document.querySelectorAll('div[data-ad-preview="message"]'); 

  posts.forEach(post => {
    const postText = post.innerText || "";
    
    // 检查是否包含关键词
    const matched = KEYWORDS.some(keyword => postText.includes(keyword));
    
    if (matched) {
      // 提取帖子的链接(找到该帖子内的绝对时间戳链接)
      const linkEl = post.closest('div[role="article"]').querySelector('a[href*="/permalink/"]');
      const postUrl = linkEl ? linkEl.href : window.location.href;

      // 如果是新帖子(可以通过本地 storage 记录已通知过的 ID,防止重复通知)
      chrome.runtime.sendMessage({
        action: "keywordMatched",
        text: postText,
        url: postUrl
      });
    }
  });
})();

请谨慎使用此类代码。


🧠 进阶:如何集成 AI 意图过滤?

如果只是纯字符串匹配,你会收到大量广告和无关通知。可以建立一个中转服务器(Node.js / Python),让插件通过 Webhook 把抓到的帖子推给大模型做判断:

javascript

// 伪代码:将文本送给大模型进行语义分类
const response = await openai.chat.completions.create({
  model: "gpt-4o-mini",
  messages: [
    { role: "system", content: "你是一个商机筛选助手。判断以下 Facebook 帖子中,发帖人是否正在‘寻找本地装修工人’。请只回答 [YES] 或 [NO]。" },
    { role: "user", content: postText }
  ],
});

if (response.choices[0].message.content.includes("YES")) {
  // 真正触发紧急通知
}

请谨慎使用此类代码。


⚠️ 自研工具防封号(Anti-Ban)至关重要的铁律

Facebook 拥有一套全球顶尖的反爬虫与行为审计算法(Anti-Scraping)。一旦它检测到某个账号每隔几秒固定刷新页面,或者页面滚动速度极度规律,就会直接限制该账号登录,甚至封号。

  • 拟人化随机延迟:不要把扫描时间定死在“每 15 分钟”。使用随机函数,让它在 15分钟 ~ 28分钟 之间随机变动。

  • 模拟真实人类操作:在 content.js 中加入模拟鼠标滚动(Scroll Down/Up)和间歇性停顿的行为。

  • 严格控制扫描频率:不要为了追求即时性设置每 1 分钟扫描一次。对于普通群组,每 30 分钟到 1 小时刷新一次是安全边界。

  • 多账号分流(养号):如果监控的群组多达几十个,强烈建议注册或购买专用的“小号”加入这些群组专门用来跑插件。千万不要用你绑定了重要主页、广告账户的“大号”去跑自动化脚本。

  • 利用 RSS 中转(如果有公开群组):如果是公开群(Public Group),可以尝试寻找第三方能将其转化为 RSS 订阅源的服务,通过后端服务器解析 RSS,这样完全不消耗你的 Facebook 账号活跃度。

技术
许可协议:  CC BY 4.0
分享

相关文章

10月 2, 2026

iOS 侧载(Sideloading)工具

AltStore 和 Sideloadly 都是目前最流行的 iOS 侧载(Sideloading)工具。 简单来说,它们的作用就是让你绕过苹果的官方 App Store,直接把第三方的 IPA 安装包(也就是 iOS 的应用安装文件)安装到你的 iPhone 或 iPad 上。 通过这两个工具,你

9月 28, 2026

注册 Chat Participant

将当前服务接入 VS Code 的 AI 聊天窗口是完全可行的。VS Code 在近期的版本中正式推出了 Chat Extensions API(github.copilot.chat),允许第三方扩展将自定义的 LLM 服务或工具注册到 Copilot Chat 面板中。 结合当前 code_ge

9月 23, 2026

php intelephense 设置 if 空格

在 VS Code 中,如果你使用的是 PHP Intelephense 插件,控制 if 关键字后面是否加空格的设置是由其内置的格式化引擎(基于 PSR-12 标准)决定的。 你可以通过修改 VS Code 的 settings.json 来配置这个行为: 1. 开启 if 后面的空格(默认/推荐

下一篇

think-orm 2.0.62 单独设置数据表字段缓存驱动和数据缓存驱动

上一篇

将监控程序直接跑在云端

最近更新

  • 比尔盖茨的智慧:想多赚钱,就每天循环做这3件事
  • iOS 侧载(Sideloading)工具
  • 程序员越想创业,越不要急着动手
  • 注册 Chat Participant
  • 中秋给在外游子的一封信

热门标签

API CodeGeex Coding Cursor DeepSeek Docker Gitkraken Harness Laravel Management

目录

©2026 mdo. 保留部分权利。