移植自 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 带网关原话 / 正常返回)。
8.8 KiB
8.8 KiB
Matrix 统— 多机同步标准化指南
版本: v1.0.0
最后更新: 2026-05-01
适用场景: 本机测试完成后,将修改同步到其他电脑
1. 同步架构总览
主电脑(Redmi-12C)
│
├── agent-sync/ ←────────── 坚果云 / Gitee ──────────→ agent-sync/(其他电脑)
│ ├── 02_skills/matrix/ 代码 + 文档 │
│ ├── 05_tools/07_matrix/ │
│ └── ... │
│ │
└── agent-local/ ←────────── 不同步(每机独立) ────→ agent-local/(其他电脑)
└── tools/matrix/ │
├── config/accounts.yaml (手动配置) │
├── profiles/ (手动登录) │
├── data/cookies/ (重新导出) │
└── data/matrix.db (重新初始化) │
同步内容清单
| 类别 | 内容 | 同步方式 | 是否同步 |
|---|---|---|---|
| 代码脚本 | scripts/*.py, *.sh | Git + 坚果云 | ✅ |
| 蓝图文件 | blueprints/*.json | Git + 坚果云 | ✅ |
| 标准化文档 | docs/*.md | Git + 坚果云 | ✅ |
| 技能定义 | 02_skills/matrix/ | Git + 坚果云 | ✅ |
| 安装脚本 | install.sh | Git + 坚果云 | ✅ |
| 依赖清单 | requirements.txt | Git + 坚果云 | ✅ |
| 配置模板 | config_template/ | Git + 坚果云 | ✅ |
| local.yaml | 本机路径配置 | 每机独立生成 | ❌ |
| accounts.yaml | 手机号/端口 | 每机手动配置 | ❌ |
| Chrome Profile | 浏览器登录数据 | 每机重新登录 | ❌ |
| Cookie 文件 | data/cookies/ | 每机重新导出 | ❌ |
| matrix.db | 执行记录/DB | 每机重新初始化 | ❌ |
| Python venv | 安装的包 | 每机重新安装 | ❌ |
| Playwright Chromium | 浏览器二进制 | 每机重新安装 | ❌ |
| Camoufox | Firefox 浏览器 | 每机重新安装 | ❌ |
2. 标准化同步流程
2.1 在主电脑上提交修改
# 1. 确认所有修改已保存
cd ~/workbuddy-agent-os/agent-sync
# 2. 查看修改文件
git status
# 预期看到:
# modified: 02_skills/matrix/SKILL.md
# modified: 05_tools/07_matrix/scripts/switch_account.py
# modified: 05_tools/07_matrix/scripts/cdp_connector.py
# new file: 05_tools/07_matrix/scripts/auth_manager.py
# modified: 05_tools/07_matrix/docs/FULL_TEST_REPORT.md
# new file: 05_tools/07_matrix/docs/SYSTEM_ARCHITECTURE.md
# new file: 05_tools/07_matrix/docs/SYNC_GUIDE.md
# 3. 提交并推送
git add -A
git commit -m "Matrix 系统修复: 原子化登录模块 + 稳定性修复"
git push origin main
注意: 坚果云会同步
agent-sync/目录下的文件修改,但建议以 Git 为主要版本控制手段,坚果云仅作为文件快速分发。两台电脑都需要安装坚果云并登录同一账号。
2.2 在其他电脑上拉取更新
# 方式A: 通过 Git(推荐,版本可控)
cd ~/workbuddy-agent-os/agent-sync
git pull origin main
# 方式B: 通过坚果云(自动同步)
# 确保两台电脑登录同一坚果云账号,agent-sync/ 目录会自动同步
2.3 在新电脑上运行安装脚本
# 1. 运行一键安装(建立目录骨架 + 安装依赖 + 生成配置)
bash ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/install.sh
# 2. 安装 Camoufox(额外的 Firefox 浏览器)
~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/scripts/install_camoufox.sh
# 或手动:
# pip install camoufox
# python -m camoufox fetch
2.4 配置本地账号
# 编辑本机 accounts.yaml(手机号/端口/备注按本机设置)
vim ~/workbuddy-agent-os/agent-local/tools/matrix/config/accounts.yaml
# 必须修改的字段:
# - phone: 本机对应的手机号
# - port: 确保端口不冲突(Chrome: 9222+, Camoufox: 9301+)
2.5 初始化数据库(可选)
# 如果新机没有 matrix.db,初始化一个
cd ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix
~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/scripts/init_db.py
2.6 重新登录各平台
# 每个账号需要重新手动登录一次
# Chrome 方案:
cd ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix
python scripts/switch_account.py --method profile --target douyin_01 --port 9222
# → 浏览器打开 douyin.com,扫码登录
# → 登录后自动检测 Cookie → 自动导出到 data/cookies/
# Camoufox 方案:
python scripts/yanghao_runner.py --account douyin_camo01 --blueprint douyin_browse_v2 --browser camoufox
3. 本地依赖完整清单
以下是在新电脑上需要重新部署的所有本地依赖:
3.1 Python 包
# 使用 agent-os 的 Python 环境
PY=~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/install.sh 自动处理
# 或手动安装:
pip install -r ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix/requirements.txt
# 包含: patchright, camoufox, PyYAML
3.2 Playwright 浏览器
# Chromium(Chrome 方案需要)
python -m patchright install chromium
# 注意: 不需要 firefox(Camoufox 自带 Firefox)
3.3 Camoufox 浏览器
# Camoufox 方案需要
pip install camoufox
python -m camoufox fetch
# 下载到: ~/Library/Caches/camoufox/Camoufox.app/
3.4 本地目录结构
agent-local/tools/matrix/
├── config/
│ └── accounts.yaml # 手动配置(每机不同)
├── data/
│ ├── cookies/ # 登录后自动导出
│ ├── camoufox_pids/ # 运行时自动创建
│ └── matrix.db # init_db.py 初始化
├── profiles/
│ ├── account_01/ # 登录后自动生成
│ ├── douyin_02/
│ ├── camoufox_01/
│ └── camoufox_02/
├── logs/ # 运行时日志
└── screenshots/ # 可选
4. 版本对照表
每次修改后,在主电脑上记录修改范围,方便其他电脑核对自己是否拉取了最新代码。
v2.1.0 (2026-05-01) 修改清单
| 文件 | 修改类型 | 说明 |
|---|---|---|
scripts/auth_manager.py |
新增 | 原子化登录模块(Cookie 检测/导出/注入) |
scripts/switch_account.py |
修改 | 登录检测改为 auth_manager,自动导出 Cookie |
scripts/cdp_connector.py |
修改 | 添加 os=windows / 中文字体 / 委托 auth_manager |
02_skills/matrix/SKILL.md |
修改 | 更新正确入口、新增原子模块说明 |
docs/FULL_TEST_REPORT.md |
修改 | 新增修复记录、已验证功能 |
docs/SYSTEM_ARCHITECTURE.md |
新增 | 全链路系统架构文档 |
docs/ACCOUNT_LOGIN_SOP.md |
新增 | 账号登录标准化操作流程 |
docs/SYNC_GUIDE.md |
新增 | 多机同步指南(本文) |
blueprints/douyin_browse_v3.json |
DB注册 | 已在主电脑注册到 task_blueprints |
blueprints/douyin_nurture_v1.json |
DB注册 | 同上 |
profiles/douyin_01/ |
删除 | 冗余目录(11MB) |
新机注意事项:
- DB 注册的蓝图(v3/nurture)需在新机重新运行
init_db.py或在首次使用时自动注册 - 删除冗余目录是主电脑操作,新机没有这个目录,无需处理
5. 常见问题
Q: 为什么不能直接复制 Chrome Profile?
Chrome Profile 包含设备绑定的加密数据(Cookie 用本机密钥加密),复制到其他电脑会失效。必须在新机重新扫码登录。
Q: 为什么 accounts.yaml 不能同步?
每个账号绑定的手机号是固定的,但不同电脑上 Chrome Profile 目录路径和端口分配可能不同(例如一台电脑 9222 已占用,需要用 9224)。
Q: 主电脑上的修改如何确保不丢失?
# 养成好习惯:每次修改后
cd ~/workbuddy-agent-os/agent-sync
git add -A
git commit -m "描述修改内容"
git push origin main
Q: 新电脑需要安装什么额外软件?
- 坚果云(同步 agent-sync/ 文件)
- Git(拉取代码)
- Chrome 浏览器(养号工具使用)
- agent-os 的 Python 环境(install.sh 自动处理)
6. 快速检查清单
新机部署完成后,逐项确认:
- Git pull 或坚果云同步完成
- install.sh 运行成功
- Camoufox 安装完成(如需要)
- accounts.yaml 已配置本机账号
- matrix.db 已初始化
- Chrome Profile 已重新登录
- Cookie 已自动导出
python scripts/switch_account.py --status显示 activepython scripts/auth_manager.py 9222显示 sessionid ✅