news 2026/9/3 16:20:35

自己搭一个网站变更检测平台:changedetection.io 部署与常用配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自己搭一个网站变更检测平台:changedetection.io 部署与常用配置

自己搭一个网站变更检测平台:changedetection.io 部署与常用配置

【免费下载链接】changedetection.ioBest and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock alerts, and website defacement monitoring—all for free or enjoy our SaaS plan!项目地址: https://gitcode.com/GitHub_Trending/ch/changedetection.io

你大概也干过这种事:一个商品降价、一个页面更新、一个抢票入口开放,全靠手动刷新盯。changedetection.io 是一个自托管的网站变更检测工具,把要盯的 URL 交给它,它按你设定的频率抓页面、做内容比对,发现变化就通过邮件、Discord、Webhook 等渠道推给你。数据存在自己机器上,不用把敏感 URL 列表交给第三方。

能力说明
内容比对按词/行/字符级 diff 展示变化,支持 PDF、JSON API
区域过滤CSS 选择器、XPath、JSONPath、jq,只盯页面的一部分
触发条件"价格低于 50 才通知""出现某关键词才告警"这类规则
JS 渲染抓取可挂 Playwright/WebDriver 浏览器,处理登录后、动态加载的页面
通知渠道基于 apprise,邮件、Discord、Slack、自定义 API 等

选哪条部署路径

大多数人选 Docker Compose:仓库自带docker-compose.yml,一条命令拉起,数据卷、重启策略都配好了。如果你不想 clone 仓库,也可以直接docker run指定ghcr.io/dgtlmoon/changedetection.io:latest镜像,或pip3 install changedetection.io后跑 Python 进程——这两种方式省一步,但浏览器抓取、反向代理这类扩展配置都要自己写,后面不展开。

把容器跑起来并加上第一个监控

先 clone 仓库并启动:

git clone https://gitcode.com/GitHub_Trending/ch/changedetection.io cd changedetection.io docker compose up -d

默认监听127.0.0.1:5000,浏览器打开就能看到面板。Mac 上如果 5000 端口和 AirPlay 冲突,把docker-compose.yml里的ports改成127.0.0.1:5050:5000,访问 5050 即可。

打开后点 "Add New Watch",粘一个 URL 保存,它就按默认频率开始检查。第一次运行会把页面文本存下来作为基线,之后每次比对都以它为参照,有差异就会标记为"有变更",你可以逐词查看。

要盯的价格和库存,让它按商品字段抓

普通网页比对是拿整页文本比,但对电商页面有个更准的办法:在编辑页勾选 "Re-stock & Price detection for single product pages",它会自动提取 HTML 里的商品元数据(价格、库存状态),你可以设"降价超过 N% 才通知""库存从缺货变有货时通知"。

只监控一两个商品的话,直接整页比对也够用,不需要开这个。

页面是 JS 渲染的:挂一个 Playwright 浏览器

默认抓取器不发 JavaScript,动态加载、登录墙后面的页面它抓不到。要处理这类页面,在docker-compose.ymlchangedetection服务里加两行环境变量:

environment: - PLAYWRIGHT_DRIVER_URL=ws://browser-sockpuppet-chrome:3000

再取消文件末尾browser-sockpuppet-chrome服务(基于 sockpuppetbrowser 的 Chrome 容器)和depends_on那几行的注释,然后docker compose up -d重建。之后新建监控时抓取方式选 Playwright,就能渲染 JS 了。旧方案 selenium/standalone-chrome 仍可用,但项目作者标注它已弃用、截图和状态码支持都不如 Playwright,新装不建议选它。

配套功能也依赖这个浏览器:Visual Selector(在页面上框选要监控的区域)、Browser Steps(抓取前先填表单、点按钮,比如先登录),这两个功能对反复盯登录后的后台页面很有用。

只盯某个区域、满足条件才通知

整页比对会报很多噪音:广告位轮换、时间戳、"推荐阅读"列表都会触发变更。过滤和条件在编辑页的几个栏位里完成:

  • 提取/过滤:填 CSS 选择器、XPath 或json:/jq:过滤器,只比对匹配到的部分。监控 JSON API 时用 jq 写条件表达式,比如只保留价格大于某个值的条目
  • 忽略:忽略某段文本或链接,正则也行
  • 触发条件:页面出现/消失特定文字、数值高于或低于阈值时才告警

条件这块还支持按星期、按时间段排检查时间,比如只在工作日 9 点到 18 点检查国外新闻站,面板里有"仅工作时间""仅周末"快捷按钮:

变更推送到哪:配置通知

通知基于 apprise 库,在监控的编辑页 "Notification" 栏位填一个或多个 URL,格式即渠道:

discord://webhook_id/webhook_token mailto://user:pass@example.com?to=you@example.com json://api.example.com/endpoint

通知的标题和正文支持 Jinja2 模板,可以只把 diff 里变化的部分写进消息,不用把整页文本发出去。渠道清单很长(Slack、Telegram、企业微信类自定义 API 等),思路都是拼一个 URL 进去。

跑久了:更新、备份和排错

更新版本:镜像 tag 换成:latest拉的就是稳定版,升级只需docker compose pull && docker compose up -d。数据在changedetection-data卷里,不在容器内,升级不丢配置。

备份:数据卷就是全部状态(监控列表、历史、截图)。备份时把卷拷出去即可:

docker run --rm -v changedetection-data:/src -v $(pwd):/backup alpine tar czf /backup/changedetection-backup.tar.gz -C /src .

出问题的现象和对应查法:

  • 访问不了 5000 端口:先docker ps确认容器在跑;在的话docker logs changedetection看启动日志,常见是端口占用(改ports映射)或LISTEN_HOST没放开(只绑了 127.0.0.1 时,宿主机以外访问不了)
  • JS 页面抓到的内容是空的:Playwright 浏览器服务没起来。docker psbrowser-sockpuppet-chrome是否健康,再确认PLAYWRIGHT_DRIVER_URL里的主机名和端口与 compose 服务一致
  • 抓到页面但一直提示变更:多数是页面里有时间戳、随机 token,加"忽略"规则(正则匹配时间戳格式)通常能消除
  • 通知发不出去:apprise 对 URL 拼写严格,json://渠道注意目标要支持 POST;先看容器日志里 apprise 的报错,再对照渠道文档核 webhook 地址

接下来做什么

  • 加第二个监控试试 jq 过滤:找一个返回 JSON 的 API,只用它返回的某几个字段做比对,体会一下过滤和整页比对的差别
  • 配一条 Discord 或邮件通知,把模板里的{{ diff }}换成你关心的字段,让推送只说人话
  • 完整功能清单(API 接口、更多渠道格式)看仓库里的 API 规范 和 docs 目录

【免费下载链接】changedetection.ioBest and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock alerts, and website defacement monitoring—all for free or enjoy our SaaS plan!项目地址: https://gitcode.com/GitHub_Trending/ch/changedetection.io

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 13:18:35

基于SpringBoot的校园点餐小程序(源码+lw+部署文档+讲解等)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/9/2 13:18:34

面波频散曲线反演:MATLAB实现浅层地质剪切波速剖面

简介:本资源是一套面向地球物理勘探与地震工程初学者的MATLAB面波频散曲线反演实践程序,聚焦被动源面波数据处理与地下弹性参数反演这一核心任务,适用于地质工程、地球物理学相关专业本科生及科研入门者开展课程设计、毕业设计或自主学习。压…

作者头像 李华
网站建设 2026/9/2 13:18:13

微信聊天记录导出教程:三步导出 HTML、Word、CSV 永久保存

微信聊天记录导出教程:三步导出 HTML、Word、CSV 永久保存 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…

作者头像 李华
网站建设 2026/9/2 13:17:06

SwiftUI-Agent-Skill核心拆解:9大审查维度让AI告别低级SwiftUI错误

SwiftUI-Agent-Skill核心拆解:9大审查维度让AI告别低级SwiftUI错误 【免费下载链接】SwiftUI-Agent-Skill SwiftUI agent skill for Claude Code, Codex, and other AI tools. 项目地址: https://gitcode.com/gh_mirrors/swi/SwiftUI-Agent-Skill 如果你正用…

作者头像 李华
网站建设 2026/9/2 13:15:26

ESP32与CAN总线融合:物联网边缘节点开发全攻略

简介:本资源是一套面向嵌入式开发工程师与物联网进阶学习者的ESP32 CAN总线通信实战源码,聚焦工业现场通信、车载网络调试及多节点数据交互等典型场景。项目摒弃Mongoose OS官方Arduino兼容层,直接集成ESP32 Arduino核心库与硬件抽象模块&…

作者头像 李华