changedetection.io 0.60.9 快速入门(添加监控到差异告警)
changedetection.io 0.60.9 快速入门教程,手把手完成添加监控、CSS/JSON/XPath 过滤器、查看差异、配置告警通知到重检策略的完整闭环,全部操作在真实环境实测通过。
changedetection.io 0.60.9 快速入门(添加监控到差异告警)
目标:在已安装的 changedetection.io 0.60.9 上,完成一次完整的变更监控闭环——添加监控、设置过滤器、查看差异、收到告警通知。本篇所有界面文案与 API 回显均来自 0.60.9 实测。
本篇演示环境:changedetection.io 0.60.9(pip 安装,访问地址
http://127.0.0.1:5000,远程访问把127.0.0.1换成你的服务器实际 IP);被监控目标是一个自建的"商品价格页"(http://127.0.0.1:8000/monitor-test.html,页面含价格、库存、版本号等字段,方便演示变化)。安装步骤见《changedetection.io 0.60.9 Ubuntu 22.04 安装指南》。
一、环境信息
| 项目 | 实测值 |
|---|---|
| changedetection.io 版本 | 0.60.9 |
| Web 界面 | http://127.0.0.1:5000(默认端口 5000,无登录密码的匿名模式) |
| 监控目标示例 | http://127.0.0.1:8000/monitor-test.html(商品价格演示页) |
| 通知演示渠道 | json:// Webhook(本地接收器 http://127.0.0.1:9000/changedetection) |
💡 说明:changedetection.io 默认是匿名模式(没有账号体系),打开界面即可使用。只要在 Settings → General 中设置过访问密码,所有访问才需要登录。
二、前置条件
- changedetection.io 服务已启动:
systemctl is-active changedetection输出active(或 Compose 版docker compose ps状态为 running); - 浏览器能打开
http://127.0.0.1:5000,页面标题为Change Detection; - 准备一个可访问的监控目标 URL(本篇用自建演示页,你也可以换成任意公开网页,如商品页、新闻列表、软件下载页)。
三、认识主界面
打开 http://127.0.0.1:5000,主界面分为三个区域(以下控件名均为 0.60.9 实测原文):
① 顶部工具栏:搜索框(aria 标签 Filter watches,按关键字过滤监控列表)、Pause checks(暂停全部检查调度)、Mute notifications(临时静音通知)、RSS 图标(RSS Feed,输出变更 feed)、Import lists of web pages(批量导入 URL 列表)、Queue(查看当前检查队列)、Live activity(实时活动窗口)。
② 添加监控表单(页面右上角):
| 控件 | 实测信息 |
|---|---|
| URL 输入框 | placeholder="www.website.com/page.html",必填 |
| Processor 单选 | Webpage Text/HTML, JSON and PDF changes(默认选中,通用变更监控)/ Restock and price detection(补货与价格监控) |
| 提交按钮 | 按钮文字为 Watch |
③ 监控列表:每个监控一行,显示标题(URL)、标签、上次检查时间、上次检查状态;行内快捷按钮 pause / mute / recheck;列表上方批量操作按钮支持多选后 recheck(重检)、mark-viewed(标记已读)、clear-errors(清除错误)、assign-tag(分配分组)、mute / unpause 等。
首次全新安装时,列表里已有两个官方预置示例监控(https://news.ycombinator.com/ 与 https://changedetection.io/CHANGELOG.txt),用于演示,可选中后删除。
四、添加第一个监控
4.1 界面方式
在右上角表单 URL 框输入监控目标,点击 Watch 按钮:
URL: http://127.0.0.1:8000/monitor-test.html
提交后页面刷新,列表中出现新监控行,同时界面提示该监控已加入检查队列。首次检查完成后,这条监控的历史基线(第一次快照)就建立了。
等价的 REST API 创建方式(响应为监控 UUID):
curl -s -H "x-api-key: 5521439027a85d13458e92c9c11b0cda" -X POST -H "Content-Type: application/json" -d '{"url": "http://127.0.0.1:8000/monitor-test.html", "tag": "价格监控"}' http://127.0.0.1:5000/api/v1/watch
实测回显:
{"uuid": "c7995f0b-253d-4736-86b4-7fad08b927c6"}
💡 说明:
x-api-key的值在 Settings → API 页查看(0.60.9 首次安装自动生成)。API key 是调用 REST API 的唯一凭证,注意保密。API 全量用法见《changedetection.io 0.60.9 进阶实战与运维》。
4.2 手动触发首次检查
新监控会按默认策略排队检查,想立刻建立基线可以手动触发:
- 界面:点击监控行内的
recheck按钮; - API:访问
GET /api/v1/watch/<uuid>?recheck=true(uuid 即 4.1 返回的值)。
检查完成后,监控行会显示"上次检查时间",无红色错误标记即抓取成功。
4.3 理解基线快照
changedetection.io 的告警逻辑是对比两次快照:第一次抓取的内容是基线,之后每次抓取与最近一次快照对比,有差异才算"变更"。所以刚添加的监控不会触发任何通知——这是正常现象。
五、用过滤器只盯关键内容
网页上往往有会频繁变化但我们不关心的部分(广告、时间戳、推荐位)。过滤器让监控"只看"你指定的区域,既减少噪音告警,又能做精准追踪(如只盯价格数字)。
5.1 过滤器在哪里设置
进入监控编辑页(点击列表中的监控标题):Filters & Triggers 标签页 → CSS/JSONPath/JQ/XPath Filters 输入框。一行一个过滤器,可叠加多条。
5.2 CSS 选择器实测(推荐入门)
演示页的结构中价格元素是 <div id="price">¥129.00</div>。设置 CSS 过滤器:
#price
点击 Save 保存后手动 recheck。此后这个监控只关注 #price 元素的文本变化。
实测效果:把演示页价格从 ¥129.00 改成 ¥139.00 后重检,监控立即检出变更;而同页面上"版本号 v1 → v2"、"现货 → 缺货"等其他字段的变化不再触发告警(快照中只有价格)。这正是过滤器的价值。
5.3 JSON 监控与 json: 过滤器实测
监控 JSON 接口(如价格 API)时,URL 直接填接口地址,用 json: 前缀的过滤器提取字段。演示接口 http://127.0.0.1:8000/status.json 内容:
{
"name": "监控测试数据",
"version": "v1",
"price": 129.00,
"stock": "in_stock",
"items": [
{"id": 1, "name": "商品A", "qty": 12}
]
}
创建监控时过滤器填:
json:price
实测效果:把接口中的 price 从 129.00 改为 99.00 后重检,差异输出(REST API difference 端点原文):
(changed) 129.0
(into) 99.0
价格字段被精准提取,JSON 里其他字段的变化完全不干扰。
5.4 XPath 过滤器实测
对表格类内容可用 xpath: 前缀。演示表格页中"状态"列单元格为 <td class="state">运行中</td>,过滤器填:
xpath://tr/td[@class="state"]
实测效果:把"节点二"的状态从"运行中"改为"已停止"后重检,快照内容只剩状态列两行文本:
运行中
已停止
变更被精准捕获。
5.5 过滤器语法速查
| 语法 | 前缀 | 示例 | 适用 |
|---|---|---|---|
| CSS 选择器 | 无前缀 | #price、div.price-tag | HTML 页面(最常用) |
| JSONPath | json: | json:price、json:items[0].name | JSON 接口 |
| XPath | xpath: | xpath://tr/td[@class="state"] | 复杂 HTML/表格 |
| JQ | jq: | jq:.price | 复杂 JSON 加工 |
| 移除元素 | Remove elements 输入框 | div.ads(CSS) | 反向剔除噪音区域 |
💡 技术拓展:CSS 选择器三分钟入门——
#id按 id 选(唯一元素)、.class按类名选、div p选 div 内所有 p、div > p只选直接子级、[name="value"]按属性选。在浏览器开发者工具(F12)里可以在 Elements 面板右键元素 → Copy → Copy selector 直接拿到选择器。拿不准时先填进去保存重检,从快照结果反推是否选对了元素。
六、查看差异
6.1 差异页
发生变更后,监控行会出现高亮标记(Unread 徽标)。点击进入差异视图(页面标题格式为 Change Detection - <监控URL> - History),新旧内容左右并排,变化部分用颜色标注:
- 红色块
Changed text:被替换的旧内容; - 绿色块
Changed into:替换后的新内容; - 页面顶部显示相似度百分比(实测示例
80%); - 点
Unread标记或列表批量mark-viewed可清除未读状态。
6.2 文本化差异输出
同一份差异在 REST API / RSS / 通知中的文本形态是统一的。实测 difference 端点输出(价格页从 v1 到 v2 的变化):
(changed) 产品监控页面
(changed)
(changed) ¥129.00
(changed) 现货
(changed) 页面版本 v1
(changed) * 第一条公告:系统上线
(into) ¥139.00
(changed) 行是旧内容,(into) 行是新内容。配合 5.2 的 CSS 过滤器后,输出会精简为只有 (changed) ¥129.00 / (into) ¥139.00 一组。
6.3 差异可读性微调
编辑页 Filters & Triggers 标签页底部有一组文本预处理开关,按需勾选:
Sort text alphabetically:字母排序(顺序无关的列表用);Trim whitespace before and after text:去除首尾空白;Remove duplicate lines of text:去重复行;Added lines/Replaced/changed lines/Removed lines:只在新增/变更/删除行出现时才触发告警(三选一的场景化触发条件)。
七、配置差异告警通知
7.1 通知渠道概览
changedetection.io 的通知底层是 Apprise 库,一个配置入口支持近百种渠道,写法是 schema://参数 的 URL。常用渠道对比:
| 渠道 | 通知 URL 格式示例 | 前置准备 | 适用场景 |
|---|---|---|---|
| 邮件 | mailto://user:q1w2e3r4@smtp.qq.com?from=aaa@qq.com&to=bbb@qq.com | 邮箱开启 SMTP 并拿到授权码 | 通用、存档友好 |
| Telegram | tgram://<bot_token>/<chat_id> | 找 @BotFather 建机器人拿 token | 个人即时推送 |
| 企业微信 | wxteams://<webhook_key> | 群机器人 Webhook 地址 | 团队协作 |
| 钉钉 | dingtalk://<token> | 群机器人 Webhook | 团队协作 |
| Discord | discord://<webhook_id>/<webhook_token> | 频道 Webhook | 社区/个人 |
| Slack | slack://<token_a>/<token_b>/<token_c> | App 凭证 | 团队协作 |
| JSON Webhook | json://host:port/path | 自建接收端 | 自动化联动、自托管 |
| Server 酱 | schan://<sendkey> | sct.ftqq.com 获取 SendKey | 国内个人微信推送 |
💡 选型建议:个人使用优先 Telegram/邮件(5 分钟配好);团队使用企业微信/钉钉/Slack 机器人;做自动化联动(触发脚本、联动网关)用
json://或post://Webhook。完整渠道列表见 Apprise 官方 Wiki(https://github.com/caronc/apprise/wiki)。
7.2 全局通知 vs 单监控通知
通知有两个配置层级:
- 全局默认:Settings → Notifications 标签页,配置默认通知 URL 与模板,对所有监控生效(新建监控默认继承);
- 单监控覆盖:监控编辑页 Notifications 标签页,可为该监控单独指定渠道与模板。
7.3 通知内容模板(Jinja2 变量)
通知标题和正文支持 Jinja2 模板变量,实测使用的配置:
Notification Title: 变更告警 - {{watch_title}}
Notification Body: 监控目标 {{watch_url}} 检测到变化:{{diff}}
常用变量:{{watch_url}}(监控地址)、{{watch_title}}(监控标题)、{{diff}}(6.2 节格式的差异文本)、{{watch_uuid}}(监控 UUID)。
7.4 实测:Webhook 通知全流程
为 JSON 价格监控(5.3 节)配置通知 URL:
json://127.0.0.1:9000/changedetection
保存后把接口价格从 99.00 改为 88.00,重检触发告警。本地 Webhook 接收器实际收到的通知报文(实测原文,中文以 Unicode 转义形式传输):
{"version": "1.0", "title": "\u53d8\u66f4\u544a\u8b66 - http://127.0.0.1:8000/status.json", "message": "\u76d1\u63a7\u76ee\u6807 http://127.0.0.1:8000/status.json \u68c0\u6d4b\u5230\u53d8\u5316\uff1a<span style=\"background-color: #fadad7; color: #b30000;\" role=\"note\" aria-label=\"Changed text\" title=\"Changed text\">99.0</span><br>\n<span style=\"background-color: #eaf2c2; color: #406619;\" role=\"note\" aria-label=\"Changed into\" title=\"Changed into\">88.0</span>", "attachments": [], "type": "info"}
报文解读:title 是模板渲染后的标题("变更告警 - 监控URL");message 里的差异正文自带 HTML 着色标记(Changed text 红底旧值 99.0、Changed into 绿底新值 88.0),接收端可按需处理。
7.5 通知排障
配置后收不到通知时按序排查:
- Settings → Notifications 页有 "Send test notification" 测试按钮,先发测试消息排除渠道配置问题;
- 单监控勾选了
Use global settings时会忽略本监控的通知配置; - 查看主服务日志中的 Apprise 报错(
journalctl -u changedetection -f或 Compose 环境docker compose logs -f changedetection); - Telegram 等渠道需服务器能访问对应 API 域名,必要时配置代理。
八、重检策略与分组
8.1 检查频率设置
监控编辑页 Time Between Check 标签页(默认勾选 Use global settings for time between check and scheduler.,即跟随全局设置):
- 取消勾选后可用
Weeks / Days / Hours / Minutes / Seconds五个输入框组合出任意间隔,如0 周 0 天 0 小时 5 分 0 秒= 每 5 分钟检查一次; - 全局默认值在 Settings → General 的 Time Between Check 区设置;
- 还可用 Scheduler 按周计划只在特定时段检查(如只在工作时间)。
⚠️ 建议:对普通网页 5
30 分钟一检足够;对秒杀/补货场景可压到 3060 秒,但注意对目标站的访问压力与被封风险。全局下限由环境变量MINIMUM_SECONDS_RECHECK_TIME(默认 3 秒)兜底。
8.2 分组(Group Tag)
添加监控时在表单或编辑页 Group Tag 字段填入分组名(如 价格监控),列表会按分组聚合展示。实测 API 创建时指定 tag 参数即完成分组:
{"url": "http://127.0.0.1:8000/monitor-test.html", "tag": "价格监控"}
分组的典型用法:选中组内全部监控后批量 recheck / mute;RSS 按分组过滤输出。
九、常见问题(FAQ)
Q1:刚添加的监控为什么没有通知? 第一次抓取是建立基线快照,基线本身不构成"变更"。等下一次检查发现与基线不同才触发。
Q2:页面天天变,告警太吵怎么办?
用过滤器只盯关键区域(第五节);配合 6.3 的文本预处理开关(排序/去空白/去重)过滤无意义变化;或对嘈杂监控单独 mute。
Q3:想监控需要登录的页面?
编辑页支持在 Request 项里带 Cookie/Token(Request headers 输入框添加),或用浏览器渲染后端(html_webdriver)配合 Execute JavaScript before change detection 输入框执行登录脚本。进阶用法见《changedetection.io 0.60.9 进阶实战与运维》。
Q4:怎么把监控转移到别的实例? 用 Settings 中的备份/导出功能或直接打包数据目录,见进阶篇备份章节。
Q5:默认抓取后端和 Chrome 渲染后端怎么选?
静态页/纯文本用默认 html_requests(快、省资源);需要执行 JS、登录后看内容、截图对比时用 html_webdriver(需要按 Compose 篇部署 sockpuppetbrowser)。
十、参考链接
- 官方文档 Wiki:https://github.com/dgtlmoon/changedetection.io/wiki
- Apprise 通知渠道大全:https://github.com/caronc/apprise/wiki
- 官方托管版站点:https://changedetection.io
- 配套文档:《changedetection.io 0.60.9 Ubuntu 22.04 安装指南》《changedetection.io 0.60.9 Docker Compose 部署指南》《changedetection.io 0.60.9 配置参数详解》《changedetection.io 0.60.9 进阶实战与运维》