feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s

移植自 mac-agent-os 的 mediacrawler_adapter:不起子进程、不开页面,用浏览器里那份
登录态直接调抖音 Web 接口。产物键名照抄 store/douyin,所以 ingest 那条链路一个字不用改。

**目前能用的(真环境实测,非推断)**:

    profile/other : 200, 7075 字节  —— 博主主页指标(粉丝/获赞/作品数/昵称)
    aweme/detail  : 200, 45425 字节 —— 单条作品详情(含点赞/评论/收藏/分享)

**目前不能用的:作品列表 `aweme/post`。** 两个互相独立的原因:
  1. 这个接口被抖音单独升级成了真校验:不带 x-tt-argus 回 403「Uifid Not Found」,
     带上 dummy 值回 200 + **空 body**。也就是说「头在不在」骗得过,「真校验」过不了。
     同一套头打 profile/other 和 aweme/detail 都是通的 —— 抖音是挑着接口加保护的,
     挑中的恰好是「批量拉作品列表」这个最敏感的动作。
  2. 改走页面截获也不行:CDP 浏览器打开博主主页会落到「验证码中间页」(当天大量探测的
     代价,过几小时要重测)。

  所以现在的边界是:**已知作品的指标刷新能做,自动发现新作品做不了**。

**排查中控住变量后得到的两条事实**(都写进注释了):
  · `Accept` / `Accept-Language` / `Referer` 才是主页接口能返回真数据的原因 —— 只有
    UA+client hints+Cookie 时是 200 但仅 121 字节的空壳,补上这三个头变 7074 字节。
    (我先前猜的 sec-ch-ua 不是关键。)
  · 因此 UA 与 client hints 必须**成套地取自同一个浏览器**,所以 BrowserIdentity 一次
    从 CDP 取齐 cookie + UA + hints,而不是各自写死。

「200 + 空 body 必须当场报错」也是刻意写死的:放过去它会在下游变成「这个博主没作品」,
把一次失败伪装成一条正常结果 —— 爬虫那条路正是这么栽的,还被翻译成「账号被封」。

测试 +11:cookie 解析、请求头成套性(含 uifid 缺失/回退)、产物键名与 store 对齐、
以及 _get 的三条失败路径(空 body / 403 带网关原话 / 正常返回)。
This commit is contained in:
2026-10-10 17:12:25 +08:00
parent 21ff01b894
commit 2112c1a870
1601 changed files with 367425 additions and 0 deletions
+226
View File
@@ -0,0 +1,226 @@
---
name: matrix
version: 1.0.0
description: 多平台社交账号矩阵养号——蓝图调度、账号切换、任务状态查询、蓝图管理
triggers:
- 矩阵
- 养号
- 抖音养号
- 执行蓝图
- 切换账号
- 账号状态
- matrix
- 查看蓝图
- 添加蓝图
- 任务调度
---
# Matrix 矩阵养号技能
## 概述
通过 Chrome CDP 和 Camoufox(Firefox 内核)控制浏览器,自动执行多平台社交账号日常养号任务。
支持抖音(已完成)、小红书/知乎(框架就绪,待登录账号)。
**工具位置**: `~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/`
**本地数据**: `~/workbuddy-agent-os/agent-local/tools/matrix/`
---
## 触发词与对应动作
| 触发词 | 动作 |
|--------|------|
| `账号状态` / `查看账号` | 列出所有账号及登录状态 |
| `执行蓝图 <蓝图名> <账号>` | 执行指定蓝图 |
| `查看蓝图` | 列出所有可用蓝图及说明 |
| `切换账号 <账号ID>` | 切换 Chrome Profile 到指定账号 |
| `启动调度` | 启动定时任务调度器 |
| `任务状态` | 查看最近任务执行记录 |
| `matrix 安装` | 在新机运行 install.sh |
---
## 核心能力
### 1. 账号管理
- 多账号隔离(每个账号独立 Chrome Profile)
- 账号状态查询(登录态检查,Cookie 主方案 + DOM 备选)
- 登录检测原子化模块:`auth_manager.py`
- `check_login_by_cookie()` — Cookie 检测(主方案,不依赖 UI)
- `check_login_by_dom()` — DOM 检测(备选,需移动端视口)
- `get_login_status()` — 多维综合检测
- `export_cookies()` / `inject_cookies()` — Cookie 导出/注入
- `wait_for_login()` — 等待用户手动登录(轮询)
- 双方案切换:Profile 切换(稳定)/ Cookie 注入(实验性)
- **`switch_account.py` 切换后自动导出 Cookie 到 `data/cookies/{id}_cookies.json`**
### 2. 蓝图执行
| 蓝图 | 说明 | 步骤数 | 状态 |
|------|------|--------|------|
| `douyin_browse_v2` | 推荐页浏览 + 随机点赞/收藏 | 11步 | ✅ 活跃 |
| `douyin_search_browse` | 搜索关键词 → 浏览结果 → 点赞 | 7步 | ✅ 活跃 |
| `douyin_comment_interact` | 浏览推荐 → 打开评论区 → 发评论 | 8步 | ✅ 活跃 |
### 3. 原子操作库(抖音,18个)
`goto_home` / `wait_watch` / `like` / `collect` / `follow` / `comment` /
`search` / `open_comments` / `close_comments` / `scroll_feed` 等
### 4. 定时调度
通过 `task_scheduler.py` 设定各账号的执行频率,后台持续运行。
---
## 常用命令
```bash
TOOL=~/workbuddy-agent-os/agent-sync/05_tools/07_matrix
# 查看所有账号
python $TOOL/scripts/switch_account.py --list
# 查看当前活跃账号(含 Cookie 检测)
python $TOOL/scripts/switch_account.py --status
# 切换到指定账号(Profile 方式)+ 自动导出 Cookie
python $TOOL/scripts/switch_account.py --method profile --target douyin_01 --port 9222
# 独立登录检测(auth_manager 原子化模块)
python $TOOL/scripts/auth_manager.py 9222 # 检测端口 9222 的登录状态
python $TOOL/scripts/auth_manager.py 9223 # 检测端口 9223
# 启动 Camoufox + Cookie 注入(正确方式)
python $TOOL/scripts/yanghao_runner.py --account douyin_camo01 --blueprint douyin_browse_v2 --browser camoufox
# 执行蓝图
python $TOOL/scripts/task_engine.py --blueprint douyin_browse_v2 --account douyin_01
# 后台定时调度
python $TOOL/scripts/task_scheduler.py
# 手动启动 Chrome
bash $TOOL/scripts/launch_chrome.sh douyin_01 9222
```
---
## 执行流程
```
用户触发(对话 or 定时)
↓
task_scheduler.py(定时调度)
↓
switch_account.py(切换 Chrome Profile / Cookie 注入)
↓
task_engine.py(加载蓝图 JSON → 逐步执行)
↓
douyin_ops.py(原子操作:点赞/评论/浏览...)
↓
cdp_connector.py / camoufox_manager.py(浏览器 CDP 控制)
↓
写入 data/matrix.db(任务记录)+ logs/(执行日志)
```
---
## 账号配置文件
位置:`~/workbuddy-agent-os/agent-local/tools/matrix/config/accounts.yaml`
```yaml
accounts:
- id: douyin_01
platform: douyin
browser: chrome
profile_dir: douyin_01 # 对应 profiles/ 下的目录名
status: active
```
---
## 蓝图文件格式(供新增参考)
位置:`~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/blueprints/`
```json
{
"name": "蓝图唯一ID",
"description": "蓝图说明",
"platform": "douyin",
"steps": [
{"step": 1, "op": "goto_home", "args": {}},
{"step": 2, "op": "wait_watch", "args": {"seconds": 8}},
{"step": 3, "op": "like", "args": {"probability": 0.3}}
]
}
```
---
## 标准化文档
| 文档 | 用途 |
|------|------|
| `docs/SYSTEM_ARCHITECTURE.md` | **系统架构设计** — 模块关系、链路、原子操作清单(必读) |
| `docs/ACCOUNT_LOGIN_SOP.md` | **账号登录 SOP** — 标准化操作流程 |
| `docs/FULL_TEST_REPORT.md` | **全面测试报告** — ✅/❌ 全部标注,含时间戳 |
**所有操作请先查阅架构文档和 SOP,按标准步骤执行,不得临时改代码。**
---
## 开发状态
| 阶段 | 内容 | 状态 |
|------|------|------|
| A | Chrome CDP + 抖音原子操作(18个)+ 蓝图引擎 + 定时调度 | ✅ 已完成 |
| B | Camoufox(Firefox内核)集成 + 多浏览器内核 | ✅ 已完成(2026-04-30) |
| C | 鼠标轨迹仿真 + 语料库完善 + Canvas/AudioContext 指纹噪声 | 📋 规划中 |
| D | 小红书/知乎完整支持 + 多平台联动 | 📋 规划中 |
### 阶段B完成说明
- Camoufox 通过 `camoufox.async_api.AsyncCamoufox` 原生 API 启动(`CDPConnector(browser_type="camoufox")`)
- **重要**:Camoufox 不依赖 CDP 端口,通过 **Cookie 注入** 从 Chrome 导出的 Cookie 文件登录
- 标准入口:`yanghao_runner.py --account douyin_camo01 --blueprint douyin_browse_v2 --browser camoufox`
- **不要使用** `camoufox_manager.py --launch` 或 `camoufox_server.py --launch`(非标准入口)
- 登录态验证通过 Cookie 检测(sessionid),无需 DOM 头像元素
- Chrome 方案 + Camoufox 方案均已通过全量测试验证 ✅
---
## 多机同步
详见 `docs/SYNC_GUIDE.md` — 包含:
- 同步架构说明(什么是同步的 / 什么是每机独立的)
- 主电脑修改→提交→推送的标准流程
- 新机拉取→部署→登录的标准流程
- 本地依赖安装清单(Python 包 / Playwright / Camoufox)
- 版本对照表 + 快速检查清单
### 快速新机恢复
```bash
# 1. 拉取最新代码
cd ~/workbuddy-agent-os/agent-sync && git pull origin main
# 2. 一键安装(建立目录 + 依赖 + 配置)
bash ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/install.sh
# 3. 填写本机账号配置
vim ~/workbuddy-agent-os/agent-local/tools/matrix/config/accounts.yaml
# 4. 各账号重新扫码登录
python scripts/switch_account.py --method profile --target douyin_01 --port 9222
```
---
## 注意事项
- `profiles/` 含 Chrome 登录数据(~100MB),**换机后需重新登录**各平台
- `config/accounts.yaml` 含账号信息,**不随 agent-os 同步**,存于 agent-os-local
- Camoufox 阶段B尚未稳定,生产环境使用 Chrome CDP(阶段A)
- 反检测措施:指纹注入 + 随机延迟 + 蓝图随机化,勿过度调低延迟