一个 Tampermonkey 油猴脚本,自动抓取当前页面的评论区,调用任意 OpenAI 兼容 LLM,输出结构化的中文 Markdown 舆情报告,并附带 AI 对抗性审视。
- 版本:
1.8.1 - 作者:Kerinlin
- 协议:MIT
- 单文件油猴脚本:
ai-comment-summarizer.user.js(运行时通过 CDN 引入html2canvas用于复制图片)
- 10 大平台专属抓取器:YouTube、Reddit、Bilibili、知乎、小红书、X(Twitter)、Hacker News、linux.do、百度贴吧、抖音,各平台使用独立 DOM/Shadow DOM/JSON API 策略。
- 两段式 AI 输出
- 中立归纳报告:讨论主题 / 核心观点 / 共识 / 分歧与争议 / 情绪与风向 / 高赞金句。
- 对抗性审视(独立段落):AI 主动站到反方位置——质疑高赞、指出盲点、给出押注式判断与信心程度(高/中/低),失败自动重试一次。
- 智能分页与加载:自动滚动加载、Shadow DOM 遍历、「查看更多」按钮自动点击;针对 Hacker News 用
GM_xmlhttpRequest拉取分页 HTML 后合并 DOM;针对 linux.do 走/t/{id}.json全量拉取并按reply_to_post_number计算回复深度。 - 可中断:抓取/推理任意阶段点击「停止总结」即时终止,请求通过
AbortSignal一路下传。 - 高度可配置:自定义 API Key、Endpoint、模型、最大评论数、最小点赞过滤、System Prompt 全部可改,支持重置默认 Prompt。
- 双复制模式:点击「📋 复制」弹出居中浮层,可选「📋 复制为文本」或「🖼️ 复制为图片」——图片基于
html2canvas将整张 panel 卡片(标题/话题/正文/对抗性审视)渲染为 PNG,写入系统剪贴板;浏览器不支持ClipboardItem时(如 Firefox)自动降级为下载 PNG 文件。 - 模型列表自动补全:在设置面板输入框 focus 时自动请求
{endpoint}/v1/models拉取模型列表,按输入实时过滤;获取失败可手动输入。 - 零依赖渲染:内置轻量 Markdown 渲染器(标题/列表/引用/代码块/链接/删除线/加粗斜体),不引入任何外部 UI 库。
- 沉浸式 UI:羊皮纸 + 墨蓝主题,悬浮 FAB、骨架屏加载态、Trusted Types 兼容。
| 平台 | 域名匹配 | 抓取策略 |
|---|---|---|
| YouTube | *.youtube.com/* |
ytd-comment-thread-renderer DOM 查询 |
*.reddit.com/* |
shreddit-comment Web Component 属性解析 |
|
| Bilibili | *.bilibili.com/* |
bili-comments Shadow Root 多层穿透 |
| 知乎 | *.zhihu.com/* |
.ContentItem.AnswerItem DOM,自动展开全文+加载更多回答 |
| 小红书 | *.xiaohongshu.com/* |
评论容器滚动加载 + 去重 |
| X (Twitter) | *.twitter.com、*.x.com |
article[data-testid="tweet"] + ARIA 点赞数解析,滚动往返去重 |
| Hacker News | news.ycombinator.com |
专属分页抓取(GM_xmlhttpRequest + DOM 合并),保留回复深度 |
| linux.do | linux.do、*.linux.do |
Discourse /t/{id}.json 全量分页拉取 + 回复深度计算 |
| 百度贴吧 | tieba.baidu.com/* |
Vue 虚拟列表 $props.list 直读 + load-more 翻页 + 楼中楼按主楼层数动态采样 |
| 抖音 | *.douyin.com/* |
[data-e2e="comment-item"] DOM 查询 + 滚动加载 + Map 去重 |
任选其一(推荐 ScriptCat):
- 新建一个用户脚本。
- 将本仓库
ai-comment-summarizer.user.js全部内容粘贴进去并保存(Ctrl/Cmd+S)。 - 刷新目标网页,右下角会出现 ✨ 悬浮按钮即安装成功。
- 点击页面右下角 ✨ 按钮打开面板。
- 点击右上角 ⚙ 进入设置。
- 填入:
- API Key:你的 LLM 服务密钥。
- API Endpoint:OpenAI 兼容接口基址,不含
/v1路径,例如http://localhost:8317或https://api.openai.com。 - 模型:focus 后会自动拉取下拉候选,也可手动输入。
- 最大评论数 / 最小点赞数过滤:按需调整。
- 自定义 Prompt:默认 Prompt 已含完整输出格式约束,如需改造可在此编辑或点击「重置 Prompt」。
- 保存。
默认配置(脚本内硬编码):
{
apiKey: 'sk-sOisCHwyDG3GIhUvL',
apiEndpoint: 'http://localhost:8317',
model: 'MiniMax-M3',
maxComments: 500,
minLikes: 0,
customPrompt: DEFAULT_PROMPT
}
⚠️ 默认apiKey与endpoint仅为开发占位,请务必替换为你自己的服务。
在任意支持平台的帖子/视频页:
- 点击 ✨ 按钮打开面板。
- 点击底部「✨ 开始总结」。
- 脚本会自动滚动加载评论 → 实时显示已抓取数量 → 调用 AI 生成中立归纳 → 再次调用 AI 生成对抗性审视。
- 抓取或推理过程中按钮会变为「⏹ 停止总结」,可随时中断。
- 点击底部「📋 复制」会弹出居中浮层,提供两种复制方式(上下排列):
- 📋 复制为文本:写入完整 Markdown(含对抗性审视段落及来源标注)到系统剪贴板。
- 🖼️ 复制为图片:将整张 panel 卡片(标题/话题/正文/对抗性审视)通过
html2canvas渲染为 PNG。截图期间会用同色遮罩盖住 panel 防止用户看到变形,渲染完成后写入剪贴板;浏览器不支持图片剪贴板时(如 Firefox)自动改为下载 PNG 文件。
[Platform Scraper] ──► [Auto-Load / Paginate]
│
▼
[Filter & Sort by likes]
│
▼
[Context Builder]
│
▼
[LLM: 中立归纳报告] ──► [LLM: 对抗性审视]
│ │
└─────────┬─────────────┘
▼
[Markdown Renderer]
│
▼
[沉浸式 UI 面板]
│
▼
[复制层] ── 文本:navigator.clipboard.writeText
── 图片:html2canvas → PNG → 剪贴板 / 下载降级
- 抓取层:
Scrapers对象按平台分发;Shadow DOM 与 Web Component 都做了穿透。 - 加载层:每平台独立 autoLoad 函数(
autoLoadComments/autoLoadHNComments/autoLoadZHAnswers/autoLoadLinuxdoComments/autoLoadXHSComments/autoLoadBiliComments/autoLoadTwitterComments),全部支持token.aborted中断。 - 推理层:
callAI出中立报告,callAIInsight出对抗性审视;均为 OpenAI 兼容/v1/chat/completions,超时 120s。 - 渲染层:
md()把模型返回的 Markdown 转成受控 HTML,对抗性审视段落用独立主题色(赭红#8b3a1f)区分。 - 复制层:
copyAsImage()临时把 panel 移到(0,0)并撑开max-height→html2canvas截图 →canvas.toBlob→navigator.clipboard.write(ClipboardItem);不支持图片剪贴板时触发<a download>降级下载。
| 文件 | 说明 |
|---|---|
ai-comment-summarizer.user.js |
全部源码,单文件油猴脚本 |
LICENSE |
MIT |
README.md |
本文档 |
## 讨论主题
…
## 核心观点
- 一句话观点:依据/热度
## 共识
- …
## 分歧与争议
- 话题标题:争议点
- 正方:…
- 反方:…
## 情绪与风向
关键词 + 1-2 句说明
## 高赞金句
> 原文(👍 点赞数)对抗性审视段落在主报告之后单独渲染,结构为 ### 质疑高赞 / ### 指出盲点 / ### AI 评论 / ### 信心程度,复制时会被标注为「AI 生成,非社区共识」。
- 抓取依赖目标网站的 DOM 结构,平台改版可能导致抓取器失效,需对应更新选择器。
- 评论去重基于文本完全匹配(小红书、Twitter),对仅空格/标点差异的近似重复不生效。
- 默认 Endpoint
http://localhost:8317指向本地代理,部署在无此代理的机器上需要替换为真实可访问的 OpenAI 兼容服务。 @connect *已放开所有出站域名,请自行确保 Endpoint 可信。- 复制图片功能依赖运行时从
cdn.jsdelivr.net加载html2canvas,CDN 不可达时该功能不可用(不影响文本复制和其它功能)。 - 严格 CSP 站点(如 Hacker News、Reddit)下仍可用——
html2canvas走 DOM 解析式渲染,不依赖 SVG/img-srcdata URI,不受 CSP 限制。 - 复制图片时若浏览器不支持
ClipboardItem(Firefox 等),会自动改为下载 PNG 文件,按钮提示「已下载图片」。
MIT © Kerinlin