back
loading skill details...
网页变更监控器 — 通用网页监控工具。用户配置 URL 列表 → Skill 按频率检测网页变化 → 推送飞书消息。不写死任何平台,通用工具。触发词:网页监控、页面变更监控、URL监控、价格变化监控、竞品监控、网站更新提醒、库存监控、货源监控、网页变化检测、网站监控
---
name: web-change-monitor
description: "网页变更监控器 — 通用网页监控工具。用户配置 URL 列表 → Skill 按频率检测网页变化 → 推送飞书消息。不写死任何平台,通用工具。触发词:网页监控、页面变更监控、URL监控、价格变化监控、竞品监控、网站更新提醒、库存监控、货源监控、网页变化检测、网站监控"
override-tools: []
---
# Web Change Monitor · 网页变更监控器
用户配置任意 URL → Skill 按频率检测变化 → 推送飞书通知。
通用工具,不绑定任何平台。适用于:竞品上新提醒、价格监控、库存监控、内容追踪、论坛帖子监控等场景。
## 快速开始
### 添加监控 URL
```
用户:帮我监控这个页面 https://example.com/product/12345
```
Skill 会:
1. 抓取页面内容,计算内容哈希
2. 询问检测模式和频率(或使用默认)
3. 保存监控任务,开始检测
### 查询监控状态
```
用户:查看我的监控列表
用户:哪些 URL 有变化?
```
### 删除监控
```
用户:删除 https://example.com/product/12345 的监控
```
---
## 检测模式
| 模式 | 说明 | 适用场景 |
|------|------|---------|
| `hash` | 整体 HTML 的 MD5,有变化即触发 | 通用,任何页面 |
| `keyword` | 指定关键词出现/消失时触发 | 库存、价格、特定内容 |
| `selector` | CSS 选择器抓取特定 DOM 元素对比 | 列表型页面(商品列表、搜索结果) |
| `regex` | 正则表达式定义触发条件 | 复杂模式匹配 |
### 示例
```
用户:监控这个页面,当价格低于 99 元时通知我
[URL]
用户:用关键词监控,商品名称包含"新品"时通知我
[URL]
```
---
## 订阅套餐(复用 GEO-* 体系)
| 套餐 | 价格 | 功能 |
|------|------|------|
| 免费版 | ¥0 | 监控 3 个 URL,每 24 小时 1 次,基础哈希检测 |
| 基础版 | ¥9.9/月 | 监控 10 个 URL,每 12 小时 1 次,关键词匹配 |
| 标准版 | ¥19/月 | 监控 30 个 URL,每 6 小时 1 次,CSS 选择器,变更历史 7 天 |
| 专业版 | ¥39/月 | 不限 URL,每小时 1 次,正则匹配,变更历史 30 天,飞书分组推送 |
---
## 使用示例
### 示例 1:竞品上新提醒
```
用户:监控这个页面,商品列表有新增时通知我
[URL: 大健云仓商品列表页]
```
→ CSS 选择器模式,抓取商品列表区域
→ 检测到新增商品 → 推送飞书消息
### 示例 2:价格监控
```
用户:帮我监控这个商品,价格降到 99 元以下时通知我
[URL: 商品页]
```
→ 关键词模式:提取价格数字,价格 < 99 时触发
### 示例 3:库存监控
```
用户:监控这个链接,有货了通知我
[URL]
```
→ 默认哈希模式,有变化即通知
---
## 变更历史查询
```
用户:最近有什么页面变化了?
用户:查看 https://xxx.com 的变更历史
```
返回:变化时间、变化内容摘要、上次变化后距今时间
---
## 核心脚本
详见 `scripts/monitor.py`,完整实现:
```python
# 监控核心逻辑
from scripts.monitor import WebMonitor
monitor = WebMonitor()
# 添加监控任务
monitor.add_task(
url="https://example.com/product/123",
name="商品A监控",
mode="hash", # hash/keyword/selector/regex
frequency="6h", # 15m/30m/1h/6h/12h/24h
keyword=None, # 关键词模式
selector=None, # CSS 选择器模式
regex=None, # 正则模式
)
# 检查所有任务(有变化时自动推送飞书)
monitor.check_all()
# 查询监控列表
monitor.list_tasks()
# 删除任务
monitor.remove_task(url="https://example.com/product/123")
```
---
## 技术实现
- **爬虫**:Playwright(headless)抓取页面,模拟 UA
- **检测**:MD5 内容哈希 / 关键词匹配 / CSS 选择器 / 正则
- **存储**:SQLite 本地存储(`~/.web-change-monitor/history.db`)
- **推送**:飞书 IM 消息,模板可自定义
- **防封**:请求间隔 + 随机延迟 + 自动重试(3次)
---
## 常见问题
| 问题 | 解答 |
|------|------|
| 支持需要登录的页面吗? | 当前版本不支持登录,后续版本支持 Cookie 认证 |
| 会被网站封禁吗? | 每次请求间隔 5~15s 随机延迟,失败自动重试 3 次 |
| 监控频率能自定义吗? | 支持 15m/30m/1h/6h/12h/24h,也可传入自定义 cron 表达式 |
| 如何查看变更历史? | 说"查看变更历史",Skill 返回 SQLite 中的记录 |
| 最多监控多少个 URL? | 免费版 3 个,基础版 10 个,标准版 30 个,专业版不限 |don't have the plugin yet? install it then click "run inline in claude" again.