Files
ObsidianHome/小鱼/闲鱼消息通知/README.md
T

119 lines
5.2 KiB
Markdown
Raw Normal View History

2026-11-09 09:21:06 +08:00
# 闲鱼卖家消息通知(Edge + 调试端口轮询)
在不改网页、不装扩展的前提下,用你**自己的登录态**盯着 seller.goofish.com 的未读红点,一旦有新消息就:
本地 Windows 弹窗 + 提示音,并(可选)转发到飞书 / 企业微信 / 钉钉 / Bark(iPhone)/ Server酱。
## 原理
`launch-edge.bat` 用**独立 profile** 启动 Edge 并打开调试端口(9333)。`watch.js` 通过 CDP 每 5 秒读一次页面 DOM 里的未读徽标,数值变大就通知。
独立 profile 是必需的:Edge 136+ 在默认 profile 上会忽略调试端口。
## 三步上手
1. **双击 `launch-edge.bat`** → 在弹出的 Edge 窗口里扫码登录闲鱼,进入**消息页**,保持标签页开着。
(窗口顶部会有一条"正在受自动化软件控制"的提示,正常。)
2. **双击 `probe.bat`** → 生成 `probe-result.json`,把结果发给助手校准未读元素的选择器。
3. **双击 `start-watch.bat`** 测试;确认能弹窗后,改用 `start-watch-hidden.vbs` 后台常驻。
2026-11-09 09:42:19 +08:00
## 防刷屏 / 防乱发
`config.json` 里的 `rateLimit` 是 webhook 的闸门:
```json
"rateLimit": { "minIntervalSeconds": 60, "maxPerHour": 30 }
```
- **合并而非丢弃**:60 秒内的多次新消息不会发多条,而是攒起来,到点合成一条"合并 N 条提醒"发出去。信息不丢,群里不刷屏。
- **小时上限**:企业微信群机器人官方限制 20 条/分钟(超了返回 `45009`),这里默认 30 条/小时,远低于阈值,不会触发封禁。
- **本地弹窗不走节流**,因为那是给你自己看的;只有转发到群的受限制。
- **只在未读数变大时触发**,已读、刷新页面、重复渲染都不会误报。
## 密钥安全(重要)
webhook 的 URL 本身就是密码:拿到 URL 的任何人都能往你群里发任意消息。
这个文件夹在 **Obsidian 库里**,如果你的库有同步/进 Git,密钥会跟着上云。所以配置文件支持不写明文:
```json
"webhooks": [
{ "type": "wecom", "url": "env:WECOM_HOOK" }
]
```
然后在系统环境变量里设 `WECOM_HOOK=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx`。
(注意:环境变量对当前用户所有程序可见,安全性高于明文但不等于保险箱。)
2026-11-09 09:21:06 +08:00
## 通知配置
- 只想要本地弹窗/声音:默认即可。
- 想推到手机/群里:编辑 `config.json` 的 `webhooks` 数组,加一条即可,支持:
2026-11-09 09:52:30 +08:00
| type | 说明 |
2026-11-09 09:21:06 +08:00
|---|---|
| `feishu` | 飞书群 → 添加自定义机器人,复制 webhook 地址 |
2026-11-09 09:52:30 +08:00
| `wecom` | 企业微信群机器人地址(群内至少要有两人,或管理员建应用) |
| `wecomapp` | **企业微信自建应用**:推给自己单聊,最干净。需管理员后台建应用,填 `corpid`/`corpsecret`/`agentid`,`touser` 填你的企微 UserID |
2026-11-09 09:21:06 +08:00
| `dingtalk` | 钉钉自定义机器人地址 |
| `bark` | `https://api.day.app/你的KEY`(iPhone 锁屏推送,推荐) |
2026-11-09 09:52:30 +08:00
| `ntfy` | ntfy 主题地址,如 `https://ntfy.sh/你的主题` |
| `email` | 邮件(QQ/163 SMTP),微信有邮件提醒,等于推到手机 |
2026-11-09 09:21:06 +08:00
| `serverchan` | `https://sctapi.ftqq.com/你的KEY.send` |
| `custom` | 任意 URL,可选 `method`/`headers`/`body`,body 里可用 `{{title}}` `{{text}}` |
2026-11-09 09:52:30 +08:00
邮件示例(QQ 邮箱要先去设置里开 SMTP 并拿**授权码**,不是登录密码):
```json
"webhooks": [
{ "type": "email", "smtp": "smtp.qq.com", "port": 465,
"from": "你的QQ号@qq.com", "to": "你的QQ号@qq.com", "passEnv": "MAIL_PASS" }
]
```
企微自建应用示例:
```json
"webhooks": [
{ "type": "wecomapp", "corpid": "ww1234abcd", "corpsecret": "env:WECOM_APP_SECRET",
"agentid": 1000002, "touser": "你的UserID" }
]
```
2026-11-09 09:21:06 +08:00
示例:
```json
"webhooks": [
{ "type": "feishu", "url": "https://open.feishu.cn/open-apis/bot/v2/hook/xxxx" },
{ "type": "bark", "url": "https://api.day.app/你的KEY" }
]
```
配好后先跑一次测试:`node watch.js --test`
## 其他配置项
| 键 | 说明 |
|---|---|
| `pollSeconds` | 轮询间隔,默认 5 秒 |
| `badgeFilter.requireRed` | 只认红色徽标,减少误报 |
| `badgeFilter.includePathRegex` | 只监视路径匹配的元素,例如 `"im-nav|message"` |
| `notifyOnDecrease` | 已读后消息数变少时也提醒(默认关) |
| `quietHours` | `{"from":"23:00","to":"08:00"}`,静默时段不打扰 |
| `heartbeatMinutes` | 每隔 N 分钟写一条心跳日志,确认还活着 |
## 注意事项
- **这个 Edge 窗口的登录态独立**,和你日常用的 Edge 互不影响;闲鱼的登录过期后需要重新扫码。
- 别把 `edge-profile` 目录删了,删了就得重新登录。
- 页面大改版时红点结构会变,届时重跑 `probe.bat` 重新校准。
- 关机自启:把 `start-watch-hidden.vbs` 的快捷方式丢进 `shell:startup`。
- 日志:`watch.log`,超过 2MB 自动转成 `watch.log.old`。
## 文件
- `launch-edge.ps1` / `launch-edge.bat`:启动带调试端口的 Edge
- `probe.js` / `probe.bat`:摸清页面未读元素结构
- `watch.js`:监听主程序
- `cdp.js`:极简 CDP 客户端(零依赖,用 Node 22 内置 WebSocket)
- `notify.js` + `toast.ps1`:Toast 弹窗、提示音、webhook 转发
- `config.json`:配置