AI 驱动型 Facebook 群组关键词监控 Chrome 浏览器插件
自己开发一个类似 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 账号活跃度。