移植自 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 带网关原话 / 正常返回)。
9.0 KiB
9.0 KiB
Matrix 矩阵养号系统 v5.0 使用文档
最后更新: 2026-06-11 适用版本: v5.0(PlatformOps 架构) 多机同步: Git + 坚果云
一、总体架构
mc(统一 CLI 入口)
│
├─ mc run → mc/engine.py(纯调度层,~300行)
│ └─ PlatformOps.execute()
│ ├── DouyinOps(抖音,20+ 操作,platform_ops 接口)
│ └── XhsOps(小红书,16 操作,ops/xhs_ops.py)
│
├─ mc account → matrix_mgmt.py(账号管理)
├─ mc blueprint → matrix_mgmt.py(蓝图管理)
├─ mc corpus → mc/corpus.py(语料库)
└─ mc status → cli.py(状态查询)
代码 vs 数据
| 路径 | 共享方式 | |
|---|---|---|
| 代码/蓝图 | agent-sync/05_tools/07_matrix/ |
Git 同步 |
| 账号配置 | agent-local/tools/matrix/config/accounts.yaml |
本机独立 |
| 浏览器指纹 | agent-local/tools/matrix/identities/{name}/ |
本机独立 |
| 登录态 | agent-local/tools/matrix/identities/{name}/user_data/ |
本机独立 |
| 联邦状态 | cross_machine/data/matrix/{uid}.json |
Git 同步 |
二、新机部署
# 1. 拉取代码
cd ~/workbuddy-agent-os/agent-sync
git pull
# 2. 运行安装脚本(建目录 + 装依赖 + 配置)
bash 05_tools/07_matrix/install.sh
# 3. 确认 Python 环境
# mc 会自动检测 Python,或设置环境变量:
export AGENTOS_PYTHON=~/.workbuddy/binaries/python/envs/agent-os/bin/python3
# 4. 检查可用账号
cd 05_tools/07_matrix && ./mc account list
三、账号管理
新建账号身份
# 创建新身份(生成 BrowserForge 指纹)
python scripts/create_identity.py --name douyin_new --platform douyin
# 首次登录(浏览器打开,扫码/短信登录)
./mc account login douyin_new
同步已有账号(跨机迁移)
# 旧机器导出
./mc account export # → 生成压缩包
# 新机器导入
./mc account import <path_to_export.tar.gz>
四、cli 命令参考
养号执行
# 单账号单轮(测试用)
./mc run --accounts douyin_test --blueprints douyin_active_v1 --rounds 1
# 多账号并行
./mc run --accounts douyin_test,douyin_133 --blueprints douyin_active_v1 --rounds 3
# 混合多蓝图(每轮随机选)
./mc run --accounts douyin_test --blueprints douyin_active_v1,douyin_browse_v2 --rounds 3 --mix
# 指定小红书
./mc run --accounts xhs_01 --blueprints xhs_active_v1 --rounds 2
# 完整参数
./mc run --accounts A,B --blueprints X,Y --rounds 3 --mix --interval 45-90 --engine auto
账号管理
./mc account list # 列表(含登录态)
./mc account login <name> # 首次登录
./mc account status [name] # 查看状态
./mc account export # 导出
./mc account import <path> # 导入
蓝图管理
./mc blueprint list # 列表
./mc blueprint show <name> # 详情
状态查询
./mc status all # 全局状态
./mc status accounts # 账号列表
./mc status browsers # 浏览器进程
旧版兼容
旧 matrix.py 仍可用但标记 deprecated。对照表:
| 旧命令(matrix.py) | 新命令(mc) |
|---|---|
python matrix.py account list |
./mc account list |
python matrix.py account login X |
./mc account login X |
python matrix.py nurture run -a X -r 10 |
./mc run --accounts X --rounds 10 ... |
python matrix.py status all |
./mc status all |
python matrix.py config blueprint list |
./mc blueprint list |
五、蓝图说明
抖音蓝图
| 蓝图 | 步骤 | 说明 |
|---|---|---|
douyin_active_v1 |
27步 | 浏览×6 + 点赞×4 + 评论×2 + 收藏×1 + 搜索×2 |
douyin_browse_v2 |
11步 | 轻量浏览+随机点赞 |
douyin_nurture_v1 |
8步 | 搜索→浏览→点赞→收藏→切换 |
douyin_search_browse |
7步 | 搜索→浏览→点赞 |
douyin_comment_interact |
8步 | 浏览→打开评论区→发评论 |
小红书蓝图
| 蓝图 | 步骤 | 说明 |
|---|---|---|
xhs_active_v1 |
26步 | 浏览×5 + 点赞×5 + 搜索×2 + 收藏×2 + 评论×1 + 关注×1 |
xiaohongshu_nurture_v2 |
11步 | 浏览→点击→点赞→收藏→搜索→关注 |
蓝图格式
{
"id": "蓝图唯一ID",
"name": "显示名称",
"platform": "douyin 或 xiaohongshu",
"description": "说明",
"steps": [
{"step_id": 1, "op": "操作名", "args": {}},
...
]
}
抖音可用操作: goto_home, like, collect, follow, open_comments, close_comments, post_comment, next_video, prev_video, search, wait_watch, scroll_feed, open_video, wait, goto_url, go_back
小红书可用操作: xhs_goto_home, xhs_browse, xhs_scroll_feed, xhs_click_note, xhs_like, xhs_collect, xhs_comment, xhs_follow, xhs_search, xhs_goto_profile, xhs_read_nickname, xhs_read_user_id, xhs_read_following, xhs_read_fans, xhs_read_likes, xhs_read_bio
六、自动化任务
每日养号
# 完整执行
bash scripts/nurture_daily.sh
# 仅查看命令(不执行)
bash scripts/nurture_daily.sh --dry
# 仅跑第1组
bash scripts/nurture_daily.sh --group 1
定时执行(cron)
# 每天 9:00 和 21:00 执行
0 9,21 * * * cd ~/workbuddy-agent-os/agent-sync/05_tools/07_matrix && bash scripts/nurture_daily.sh >> /tmp/nurture_daily.log 2>&1
定时调度器(旧版兼容)
python scripts/task_scheduler.py
七、多账号并行
mc run 原生支持多账号并行。每个账号启动独立 Camoufox 浏览器,窗口自动错位:
| 账号索引 | 窗口位置 | 屏幕区域 |
|---|---|---|
| 0 | (30, 30) | 左上 |
| 1 | (400, 30) | 中上 |
| 2 | (800, 30) | 右上 |
| 3 | (30, 450) | 左下 |
| 4 | (400, 450) | 中下 |
| 5 | (800, 870) | 右下 |
# 3 个抖音同时跑
./mc run --accounts douyin_test,douyin_133,douyin_133_2 --blueprints douyin_active_v1 --rounds 3
八、跨机器同步流程
# 主机器修改后
cd ~/workbuddy-agent-os/agent-sync
git add 05_tools/07_matrix/
git commit -m "Matrix v5.0 更新"
git push
# 其他机器
cd ~/workbuddy-agent-os/agent-sync
git pull
bash 05_tools/07_matrix/install.sh # 如需要重建本地目录
不同步的内容(各机器独立):
agent-local/tools/matrix/config/accounts.yaml— 账号配置agent-local/tools/matrix/identities/— 浏览器指纹 + 登录态agent-local/tools/matrix/logs/— 运行日志
九、v5.0 变更说明
新增
mc统一 CLI(替代matrix.py)ops/_base.py— PlatformOps 基类 + OpResult 结构化结果ops/xhs_ops.py— 小红书 16 个原子操作mc/runlog.py— 结构化运行日志(JSONL)mc/engine.py— 重构引擎(~300行,原 775行)blueprints/douyin_active_v1.json— 抖音高活跃蓝图blueprints/xhs_active_v1.json— 小红书高活跃蓝图docs/MC_COMMAND_REFERENCE.md— 命令参考手册
改进
douyin_ops.py实现 PlatformOps 接口,每个操作返回 OpResult_click_selector增加 JS evaluate fallback(穿透 Shadow DOM)goto_home增加 commit 模式 + 强制继续(不因 video 未就绪阻塞)- 进入视频模式:从卡片
data-aweme-id提取视频 ID 直接导航(/video/{id}) - 视频页双击 video 获取焦点(原代码约定)
- post_comment 用 pbcopy + Meta+V(Draft.js 兼容)
- 所有
force=True跳过 Playwright 可点击性检查 - 硬编码路径修复(Python、用户名)
.gitignore排除临时蓝图和一次性脚本
废弃
matrix.py— 标记 deprecated(用 mc 替代)yanghao_runner.py— 功能合并到 mctask_engine.py— 功能合并到 mc/engine.pycamoufox_manager.py/camoufox_server.py— 被 cdp_connector.py 取代browser_manager.py/browser_keepalive.py— mc/browser.py 取代- 25+ 调试脚本 — 移入
_archive/
十、故障排查
常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| 页面加载超时 | Camoufox 下 douyin.com 使用 commit 模式 |
自动 fallback,强制继续 |
| like/collect 失败 | Shadow DOM 影响 Playwright locator | 自动 fallback 到 JS evaluate |
| post_comment 失败 | 评论区无标准输入框 DOM | 不依赖选择器,pbcopy + Meta+V 硬发 |
| 多账号窗口重叠 | 未设置 window_position | 自动按索引分配错位 |
| "代理"行消失 | 账号 config.yaml 中 proxy 被注释 | 取消注释恢复代理 |
调试命令
# 查看运行日志
cat /tmp/matrix_step_douyin_test.log
# Peekaboo 截图观察
peekaboo image
# 原子操作诊断
python scripts/diagnose_ops.py
版本信息
当前所有文档统一版本:v5.0.0。文件清单:
MODULE.md— v5.0.0TOOL.md— v5.0mc/__main__.py— v1.0.0(mc CLI 版本)docs/MC_COMMAND_REFERENCE.md— v5.0blueprints/*.json— 每个蓝图独立版本install.sh— v4.0(未变)