[AI 生成] WebMonitor - 借助 GitHub Action 实现静态网页源代码变动监测&快照保存
1534 字
8 分钟
[AI 生成] WebMonitor - 借助 GitHub Action 实现静态网页源代码变动监测&快照保存
Caution
本项目使用 AI 自动生成,不保证其准确性或可用性。请在使用前自行验证其功能。
Waiting for api.github.com...
WebMonitor
Made by Gemini & 白隐Hakuin
一个基于 GitHub Actions 的全自动工具,用于监控一个或多个静态网页的源代码变化。当变化发生时,它会自动保存快照、生成差异报告,并通过 Commit、Webhook 和邮件等多种方式发送通知
✨ 核心功能
- 定时执行:默认配置为每 6 小时自动运行一次,无需人工干预。支持自定义执行计划(Cron 表达式)。
- 多目标监控:通过简洁的
config.yml配置文件,可同时监控:- 网页 URL:抓取其完整的 HTML 源码。
- API 端点:通过执行自定义
curl命令获取响应(支持 GET、POST、自定义请求头等复杂场景)。
- 高效变更检测:使用哈希值比对内容,仅在检测到实质性差异时触发后续操作(快照保存、通知),减少冗余处理。
- 统一快照管理:所有监控目标的快照均按目标 URL(或配置的
name)命名并存储于snapshots目录下,历史记录清晰可查。 - 多通道通知:
- GitHub Commits:每次检测到变更均生成带时间戳的提交记录,永久存档于仓库。
- Webhook:
- 支持向多个 Webhook 地址推送通知。
- 支持完全自定义推送内容的 JSON 格式,便于集成飞书、钉钉、企业微信等平台。
- 邮件通知:
- 支持向多个收件人发送邮件(为每位收件人单独发送)。
- 提供灵活的收件人管理方式。
- 采用简洁的 HTML 邮件格式呈现通知内容。
- 详细通知内容:
- 包含具体的变更内容摘要 (diff)。
- 提供指向 GitHub 仓库的链接,方便查看完整快照和差异文件。
- 若配置了
name,通知中会同时显示名称和 URL 作为标识。
📂 项目结构
.├── .github/│ └── workflows/│ └── monitor.yml # GitHub Actions 工作流配置文件├── snapshots/ # 存储网页/API 快照及历史记录(自动生成)├── monitor.py # 监控任务执行脚本 (Python)├── config.yml # 监控目标配置文件└── README.md # 本说明文档🚀 快速开始
-
创建 GitHub 仓库
- 建议创建 私有 (Private) 仓库 以保护监控历史和配置隐私。
-
上传项目文件
- 将
monitor.py,config.yml和.github/workflows/monitor.yml文件上传到您的仓库。
- 将
-
配置监控目标 (
config.yml)- 编辑
config.yml文件,添加监控目标。name字段可选,用于备注。
# 全局配置 (可选)settings:email_delay_milliseconds: 1000 # 邮件发送间隔(毫秒),避免频率限制# 监控目标列表targets:- name: "GitHub 状态页" # 目标备注 (可选)type: "url"value: "https://www.githubstatus.com/"- type: "url" # 无备注,使用 URL 标识value: "https://www.v2ex.com"- name: "复杂的 POST 请求示例"type: "curl"command: | # 推荐使用 YAML 块样式处理复杂命令curl -s -X POST https://httpbin.org/post \-H 'Content-Type: application/json' \-H 'Referer: https://www.example.com/some-page' \-d '{"id": 123, "name": "test"}' - 编辑
-
配置通知渠道 (GitHub Secrets & Variables)
-
在 GitHub 仓库页面,导航至
Settings > Secrets and variables > Actions。 -
A. 配置 Secrets (敏感信息)
- 点击
Secrets标签页 >New repository secret。 - 添加:
SMTP_PASSWORD: 发件邮箱密码或应用授权码 (必需)。WEBHOOK_URL: Webhook 接收地址 (多个地址用英文逗号,分隔)。
- 点击
-
B. 配置 Variables (常规配置)
- 点击
Variables标签页 >New repository variable。 - 添加:
MAIL_RECIPIENTS: 邮件接收人列表 (多个地址用英文逗号,分隔)。MAIL_FROM: 发件邮箱地址。MAIL_SENDER_NAME: (可选) 发件人显示名称 (e.g.,监控机器人)。SMTP_HOST: SMTP 服务器地址 (e.g.,smtp.qq.com)。SMTP_PORT: SMTP 服务器端口 (e.g.,465,587)。SMTP_USER: 发件邮箱用户名 (通常与MAIL_FROM相同)。WEBHOOK_CUSTOM_PAYLOAD: (可选) 自定义 Webhook JSON 模板。
- 点击
-
完成配置后,监控任务将按 monitor.yml 设定的计划自动运行。您也可以在仓库的 Actions 标签页手动触发一次 monitor 工作流进行测试。
⚙️ 进阶配置
-
自定义执行计划
- 编辑
.github/workflows/monitor.yml文件中的schedule.cron表达式。 - 默认值:
'0 4,10,16,22 * * *'(UTC 时间 04:00, 10:00, 16:00, 22:00 / UTC+8 时间 12:00, 18:00, 00:00, 06:00)。 - 使用在线工具 (如 Crontab Guru) 生成所需表达式。
- 编辑
-
自定义 Webhook 载荷
- 通过设置
WEBHOOK_CUSTOM_PAYLOAD变量,自定义发送到 Webhook 的 JSON 结构。模板中以下占位符会被替换:{timestamp}: 检测到变更的时间 (YYYY-MM-DD HH:MM:SS)。{changes_summary}: 本次运行检测到的所有变更的详细信息汇总。
- 示例 (企业微信 Markdown 格式):
{"msgtype": "markdown","markdown": {"content": "## 监控提醒\n> 检测时间: <font color=\"comment\">{timestamp}</font>\n\n<font color=\"warning\">检测到以下目标发生变更:</font>\n\n{changes_summary}"}}
- 注意:未设置此变量时,默认发送企业微信兼容的纯文本格式消息。
- 通过设置
🔍 工作原理
- 定时触发:GitHub Actions 根据
monitor.yml中的schedule在指定时间启动一个 Runner (虚拟机)。 - 注入配置:Runner 加载配置的 Secrets 和 Variables 作为环境变量。
- 运行监控脚本:执行
monitor.py脚本,解析config.yml。 - 目标检测循环:脚本遍历配置的每个目标:
- 根据
type(url或curl) 获取目标当前内容。 - 计算内容哈希值并与历史记录比较。
- 根据
- 变更处理与通知:
- 若检测到变更,保存新快照并生成差异报告。
- 汇总所有变更信息。
- 调用配置的 Webhook 和邮件服务发送通知。
- 设置标志表明有变更发生。
- 提交变更:工作流最后一步检查标志,若为真,则执行
git commit和git push,将snapshots目录下的新文件提交到仓库。
📜 查看历史记录
- 提交历史 (Commits):仓库的提交历史中以
【自动监控】开头的记录均由本工具生成,包含时间戳。 - 文件快照 (Snapshots):直接浏览仓库中的
snapshots目录。每个目标有独立子目录,存储历次变更的快照 (*.html/*.txt) 和差异报告 (*.diff)。 - 工作流日志 (Actions Logs):在仓库的
Actions标签页,查看每次monitor工作流的运行日志。日志中清晰记录每个目标的检测结果 (检测到变化或无变化)。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
[AI 生成] WebMonitor - 借助 GitHub Action 实现静态网页源代码变动监测&快照保存
https://www.hk256.top/posts/projects/webmonitor/ 最后更新于 2025-08-16,距今已过 200 天
部分内容可能已过时
相关文章 智能推荐
1
Search Relay - 快速在不同搜索引擎之间跳转/比对搜索结果
Projects 一个简单的浏览器扩展,快速在不同搜索引擎之间跳转/比对搜索结果。支持一键提取关键词切换搜索引擎、划词搜索、右键菜单搜索
2
利用 CF Workers 解决 GitHub Actions 不按时触发问题
踩坑记录 利用 Cloudflare Workers 主动触发 GitHub Actions 运行来解决无法定时触发问题
3
MQGA - 自动化修补 QQ APK
Projects 使用 LSPatch 和 GitHub Actions 自动化修补 QQ APK 并集成 LSPosed 模块
4
ADB,启动! - 自用的 ADB 脚本
Projects 自动化开启 Android 系统“无线调试”并激活多数需要 ADB 权限的应用
5
利用 PowerToys 解决快捷键冲突
踩坑记录 利用 PowerToys 键盘管理器解决 Windows 上 VSCode 自动补全快捷键和 Windows 输入语言热键冲突
随机文章 随机推荐