整条链全在云上,不碰任何人的本机。每台无影只要:① 抖音登录对应账号 ② .env 配好 ③ 账号 channel_pref=cloud_pc,就自动跑。
已有一台配好的(野荞这台)→ 烤成自定义镜像 → 新机克隆。零重装、零装依赖、同分辨率零校准,每台只改 3 处。最省事。
新机无镜像可用时:装 Python → 传脚本 → 装依赖 → 配 .env → 设自启 →(必要时)校准。每步都有现成命令。
前提:已有一台配好的无影(Python+依赖+脚本+模板+自启全齐)。
C:\akke-wuying\wuying-dm\(脚本 + templates/ 模板图)、开机自启 akke_wuying_agent.bat。m-xxxxxxxxxxxx),发给团队 —— 大家克隆新机时要用它。m-xxxx);新建无影实例时在「镜像」处选「自定义镜像」→ 填这个码 → 克隆出来零重装、零装依赖。.env:把 AKKE_ACCOUNT_ID 换成这台账号的 id(PM 下发)。受控 key 全队可共用一把。accounts.channel_pref 设成 cloud_pc + 设节奏(见运维)。
cd C:\akke-wuying
$u = "https://mirrors.huaweicloud.com/python/3.12.7/python-3.12.7-amd64.exe"
iwr $u -OutFile py-setup.exe -UseBasicParsing
$a = "/quiet InstallAllUsers=0 PrependPath=1 Include_pip=1 Include_tcltk=1"
Start-Process .\py-setup.exe -ArgumentList $a -Wait
$env:Path = "$env:LOCALAPPDATA\Programs\Python\Python312;" + $env:Path
python --version # 应 Python 3.12.7
C:\akke-wuying\wuying-dm\wuying_poll_agent.py douyin_dm_grounded.py measure_nav.py probe_templates.py + templates/(模板图)。走 paste.rs 中转(URL 由 PM 提供,过期就重传):mkdir C:\akke-wuying\wuying-dm -Force cd C:\akke-wuying\wuying-dm iwr https://paste.rs/XXXXX -OutFile dm.tar.gz -UseBasicParsing tar -xzf dm.tar.gz
$m = "https://mirrors.aliyun.com/pypi/simple/" $p = "pyautogui","pyperclip","pillow","opencv-python","pygetwindow","python-dotenv" python -m pip install -i $m $p
.env(在脚本目录,见下方模板).env(不是仓库根)。$bat = Join-Path ([Environment]::GetFolderPath("Startup")) "akke_wuying_agent.bat"
Set-Content $bat "@echo off" -Encoding ASCII
Add-Content $bat "chcp 65001 >nul"
Add-Content $bat "cd /d C:\akke-wuying\wuying-dm"
Add-Content $bat "timeout /t 30 /nobreak >nul"
Add-Content $bat "python -u wuying_poll_agent.py > agent.log 2>&1"
python -u 才有实时 agent.log;漏了会被缓冲、看着像没动。# 按提示把鼠标依次停在 搜索框/用户tab/私信键/红色↑发送键/输入框 上、回车采集 python douyin_dm_grounded.py --capture # 看匹配分数,send_arrow ≥0.85 即稳 python probe_templates.py
C:\akke-wuying\wuying-dm\.env —— 各账号的值由 PM 下发。
# Supabase SUPABASE_URL=https://<项目>.supabase.co NEXT_PUBLIC_SUPABASE_URL=https://<项目>.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=<anon key> # 受控角色 key(全队可共用同一把;角色 key 不绑账号) SUPABASE_SCOPED_JWT=<role=wuying_worker 的自签 JWT> # 这台绑的账号(每台不同,PM 下发) AKKE_ACCOUNT_ID=<accounts.id> # 视觉定位用 —— 务必用设了额度封顶的 key,共享机别放无上限的生产 key OPENROUTER_API_KEY=<sk-or-... 封顶 key> # 轮询(默认即可) AKKE_POLL_INTERVAL=60 AKKE_CLAIM_LIMIT=3
SUPABASE_SERVICE_ROLE_KEY(agent 自动识别),但共享机强烈建议用受控 key(读全库、只能跑领单/回写,不能乱写)。Get-Content C:\akke-wuying\wuying-dm\agent.log -Tail 8
看到 === wuying_poll_agent account=... every 60s === = agent 在跑。有 pending 时逐条打印
claimed N → 搜人 → [OCR] match=True → ✅ 已点发送 → completed → sent。
min_send_interval_seconds(批内间隔)+ daily_limit(当日上限);代码侧滚动 1h 上限默认 10。规格 = 每分钟 1 条·满 10 停约 1h·当日 20,只数真成功。channel_pref=cloud_pc 开;改回 manual 关。无影关机=暂停(队列留 1 条 pending),开机自启自动续。| 现象 | 原因 / 处理 |
|---|---|
| agent 起来但不发 | 多半当日 20 满(含人工通道)→ 等滚动窗口腾槽自动续;或该账号没 channel_pref=cloud_pc |
| 搜错人 / 身份门跳过 | 输入法不是英文(抢搜索词首字);或同名撞大号(身份门跳过 = 安全) |
| 文字没进输入框 → 不发 | 分辨率变了 AKKE_INPUT_OFFSET/坐标偏 → 重跑 --capture |
agent.log 空 | 自启缺 python -u(缓冲);或还在 30s 倒计时 |
| 连库报错 401 | 把自定义角色 JWT 当 apikey 了;确认 SUPABASE_SCOPED_JWT + NEXT_PUBLIC_SUPABASE_ANON_KEY 都配了(agent 用 anon 当 apikey) |
python 找不到 | PATH 没带 Python 目录(本会话临时设,或重装时勾 Add to PATH) |
配好后:抖音登对号、.env 配好、DB 开 cloud_pc,重启 → 自己跑。