盯着某个商品价格或者库存变动时,人工每隔半小时刷新一次页面既耗费精力又容易遗漏。我在 Windows 上装了 changedetection.io 0.60.9,用本地静态页当监控目标,把页面里的 ¥199 改成 ¥149,库存从「有货」改成「只剩 3 件」,它成功比对出红绿高亮差异。
changedetection.io 是基于 Python 开发的开源网页变更监控服务。给它一个链接,它定期抓取并算哈希,再和上一版比文本差异,有变化就把改动部分标出来。
它不做什么
先把边界说清楚,这次实测基于本地环境,有四件事它没做到:
- 默认拦内网和保留 IP,监控本机或局域网设备要先开开关放行
- 默认依赖库没配无头浏览器驱动时,不处理复杂的 JavaScript 动态渲染页面
- 邮件、Telegram 和 Webhook 等外部通知渠道,本次没验证真正发送
- Docker 镜像与 TLS 反向代理配置也没有覆盖
用之前先准备好什么
- Python 运行环境,以及 pip 包管理工具
- 600MB 左右的磁盘空间,安装会连带装上 171 个包(Flask 和 selenium 等)
- 监控对象在本地或局域网内的话,还要配置允许访问私有地址的环境变量
安装用了多久,占多少空间?
建虚拟环境再装指定版本:
py -3.13 -m venv D:/wb_cache/cdio/venv
D:/wb_cache/cdio/venv/Scripts/pip install changedetection.io==0.60.9
实测装完 4 分 45 秒,venv 目录占 570MB,Scripts 下生成 changedetection.io.exe,--help 参数完整。
怎么起服务、怎么加监控?
先在本机起一个静态页当靶标:
cd /d D:/wb_cache/cdio/site
..\venv\Scripts\python -m http.server 8099
输出 Serving HTTP on 0.0.0.0 port 8099,浏览器打开是 200,页面标题「shiceku.com 实测用页面」,正文写着价格 ¥199、库存有货。
然后启动监控服务,-u 直接把这条链接录进去:
D:/wb_cache/cdio/venv/Scripts/changedetection.io.exe ^
-d D:/wb_cache/cdio/datastore -C -p 5000 -h 127.0.0.1 ^
-u http://127.0.0.1:8099/
界面起在 http://127.0.0.1:5000,首页 200,左上角显示 v0.60.9。
每个参数管什么?
| 参数 | 作用 |
|---|---|
-d | 数据存储目录,监控项、历史版本都落在这里 |
-p | Web 界面监听端口,例子用 5000 |
-h | 监听主机地址,设 127.0.0.1 时只有本机能访问 |
-u | 进程启动时直接录入要监控的 URL,省得进界面点 |
-C | 检查配置 |
第一次抓取为什么直接失败?
第一次抓取没成功,监控项里报的是:
Fetch blocked: "http://127.0.0.1:8099/" resolves to a private/reserved IP address
0.60.9 默认拦截私有网段与保留地址,避免服务被当成探测内网的工具。监控本机或局域网设备,必须先放行。
放行办法:在当前终端执行
set ALLOW_IANA_RESTRICTED_ADDRESSES=true,再重新拉起进程。这一步不做,后面所有检查都会失败。
改内容之后,它到底记下了什么?
重启后点「重新检查」,check_count 从 1 变成 2,previous_md5 写入,last_error 变成 false。
接着把靶标页的 ¥199 改成 ¥149,库存改成「只剩 3 件」,再加一行备注,再点一次检查。
结果:last_changed 写入新时间戳,diff 页把旧的三行标红、新的四行标绿,页面标题也被自动读出来显示在记录里。
监控项列表里几个字段的含义:
| 字段 | 含义 |
|---|---|
check_count | 累计检查了几次,每检查一次加一 |
last_checked | 最后一次检查的时间 |
last_changed | 最后一次检测到内容变化的时刻,没变过就不写 |
last_error | 最后一次检查的错误信息,抓取失败时这里是原文报错 |
previous_md5 | 上一版内容的哈希,用来判断这次是不是真变了 |
常见问题
能监控需要登录才能看的页面吗?
这次没测。登录态涉及 cookie 或表单提交,不在本次验证范围内,不敢替你保证能用。
能抓 JavaScript 渲染出来的内容吗?
默认不行。依赖库没配无头浏览器驱动时,它拿到的是原始 HTML,页面里靠 JS 后填的内容抓不到。要处理这类页面得额外配浏览器驱动,本次没有验证。
有变化能推到手机吗?
界面里有邮件和 Telegram 这类渠道,但本次只验证到「检测并显示差异」,通知真正发出去这一步没有测。
服务重启之后,之前的记录会丢吗?
不会。只要 -d 指向同一个数据目录,重启后监控项和历史版本都还在。实测重启后 check_count 是在原有次数上继续累加的。
能同时监控多个页面吗?
这次只验证了单条链接(用 -u 录进去)。多页面在界面上能不能批量加、并发检查会不会互相拖慢,本次没有测。
适合谁,不适合谁
适合想在本机快速部署的人。挂机盯住网页文本、价格或通知栏的变动,不用搭重型监控栈。
反过来,如果页面大量依赖 JavaScript 渲染,或者需要登录态,又或者你要的是稳定的手机推送,这三块这次都没有验证,就没法替你担保。







