资讯详情

手机放桌上自动刷抖音:用 AiPy + ADB 复刻一个国产开源 Agent 的自动化链路

📅 2026/10/12 13:48:32 | 华诺云谱 👁 阅读
手机放桌上自动刷抖音:用 AiPy + ADB 复刻一个国产开源 Agent 的自动化链路
1. 手机放桌上自动刷抖音这套链路到底在解决什么问题手机放桌上自动刷抖音本质上是把「人手动滑手机」这件事拆成三段可编程动作识别当前屏幕内容、决定下一步操作、通过 ADB 把操作指令发回手机。AiPy 在这里扮演的角色是「把自然语言翻译成 Python 脚本并本地执行」的 Agent 运行时ADB 是它与真实安卓设备之间的物理通道Python 负责把滑动、截图、等待这些动作串成可循环的任务流。适合谁适合已经玩过 OpenClaw、想找一个更轻量、数据不出本地的自动化方案的开发者也适合想用 Python 做手机端 UI 自动化但不想从零写 uiautomator 的人。我试过把一台旧安卓机用 USB 线连在笔记本上跑通「启动抖音 → 每 5 秒上滑一次 → 截图存档」的完整循环全程没有装模拟器也没有在手机上点任何按钮。这套链路最容易被低估的地方是它不需要 root不需要在手机上装额外 App只要开发者选项里的 USB 调试打开电脑端有 adb 和 Python 环境就能跑。下面我会把 ADB 连接配置、AiPy 任务脚本、TaoToken 统一 Key 接入、以及验证请求和常见报错全部拆开讲你可以直接复制着做。需要先明确一个边界本文所有操作都在你自己拥有的设备和你自己的账号上完成目的是学习 Agent 自动化链路和 ADB 编程不要用于批量刷量、爬取他人数据或任何违反平台规则的行为。抖音的包名是com.ss.android.ugc.aweme这个信息在后面的脚本里会反复用到。2. TaoToken 前置统一 Key 与 API 通道让 Agent 有模型可用AiPy 本身是一个本地执行框架它需要一个大模型来把「每 5 秒滑一次抖音」翻译成 Python 代码。如果你每个项目都去不同厂商注册、管理不同的 Key很快就会乱。TaoToken 的作用是把模型调用收敛到一个统一的 API 通道上你只需要维护一个 Key就能在 AiPy、Cline、Codex 这些工具里切换模型。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 注意 API 地址不带 UTM 参数配置的时候别写错。前置准备分三步。第一步注册后在控制台创建一个 API Key控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 只在创建时完整显示一次复制到本地安全的地方。第二步确认你要用的模型 ID比如做代码生成任务时选一个擅长 Python 的模型模型对话页面在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 你可以在那里先手动测一下模型对「写一段 ADB 滑动脚本」的响应质量。第三步如果你打算长期跑编码和 Agent 任务可以看 Coding Plan 页面 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 它更适合高频调用场景。这里要强调一个概念TaoToken 是模型能力的统一接入层不是手机控制工具。手机控制靠的是 ADB模型只负责生成和修正 Python 代码。把这两层分清楚后面排错的时候你才知道该看哪一层的日志。API Key 的管理页面在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 配置格式以文档为准。3. 可复制配置ADB 连接、AiPy 任务脚本与 settings 片段这一节是全文最核心的部分所有片段都可以直接复制。先做 ADB 连接配置。手机端设置 → 关于手机 → 连点版本号 7 次解锁开发者选项 → 返回设置 → 开发者选项 → 打开「USB 调试」和「USB 安装」。电脑端装好 platform-tools然后执行adb devices正常输出应该是这样device前面那串是设备序列号List of devices attached R58M12ABCDE device如果显示unauthorized说明手机上还没点「允许 USB 调试」解锁手机点一下即可。如果显示offline执行adb kill-server adb start-server再试。连接稳定后先手动验证一次滑动确认 ADB 本身没问题adb shell input swipe 540 1600 540 600 300这条命令的意思是从坐标 (540,1600) 滑到 (540,600)耗时 300 毫秒也就是一次上滑。不同分辨率坐标不同你可以先用adb shell wm size查分辨率再按比例换算。接下来是 AiPy 侧的任务脚本。AiPy 的机制是你用自然语言描述任务它生成 Python 代码本地执行。为了让生成结果稳定我建议你直接把下面这段作为「任务描述」喂给它而不是只写一句话# 任务控制已通过 USB 连接的安卓手机自动刷抖音 # 步骤 # 1. 用 adb devices 检查设备在线 # 2. 用 adb shell am start -n com.ss.android.ugc.aweme/.splash.SplashActivity 启动抖音 # 3. 等待 8 秒加载首页 # 4. 循环 20 次adb shell input swipe 540 1600 540 600 300然后 time.sleep(5) # 5. 每 5 次循环执行一次 adb exec-out screencap -p frame_{i}.png 存档 # 6. 结束后打印任务报告总滑动次数、截图数量、耗时AiPy 会把它翻译成可执行的 Python核心逻辑大致长这样你可以对照检查它生成的代码有没有漏步骤import subprocess, time, os def adb(cmd): return subprocess.run(fadb {cmd}, shellTrue, capture_outputTrue, textTrue) assert device in adb(devices).stdout, 设备未连接 adb(shell am start -n com.ss.android.ugc.aweme/.splash.SplashActivity) time.sleep(8) for i in range(20): adb(shell input swipe 540 1600 540 600 300) if i % 5 0: img subprocess.run(adb exec-out screencap -p, shellTrue, capture_outputTrue).stdout open(fframe_{i}.png, wb).write(img) time.sleep(5) print(done)然后是模型接入的 settings 片段。如果你用的是支持 OpenAI 兼容格式的客户端配置写成这样注意 Base URL 用不带 UTM 的 API 地址{ base_url: https://taotoken.net/api, api_key: sk-你的Key, model: 你的模型ID }如果你用的是 Codex 这类读auth.json的工具三件套要写全Base URL、Key、Model ID 一个都不能少{ base_url: https://taotoken.net/api, api_key: sk-你的Key, model: 你的模型ID }Cline 的 MCP 配置同理在 settings 里填 Base URL、API Key、Model ID 三项。Claude Code 的接入方式在文档里有专门说明地址是 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 照着填即可。记住一个原则任何工具里出现 Base URL、Key、Model ID 这三个字段就按上面这套填不要只填 Key 不填 Base URL否则会报 401。4. 验证请求与成功结果跑通一次自动滑动与内容识别配置写完必须验证不然你不知道是模型没通还是 ADB 没通。验证分两层。第一层验证模型通道用 curl 直接打一次 API确认 Key 和 Base URL 正确curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d {model:你的模型ID,messages:[{role:user,content:用一句话说明 adb shell input swipe 的作用}]}如果返回里有choices字段和正常文本说明模型通道通了。如果返回 401看下一节的排查。第二层验证 ADB 链路先单独跑一次启动抖音adb shell am start -n com.ss.android.ugc.aweme/.splash.SplashActivity手机屏幕应该亮起并进入抖音首页。如果报Error: Activity not started说明包名或 Activity 名不对用下面这条命令查当前前台应用的真实 Activityadb shell dumpsys activity activities | grep mResumedActivity拿到真实 Activity 后替换脚本里的启动命令。两层都通了再跑完整的 AiPy 任务。成功的结果是这样的手机自动启动抖音首页加载完成后每隔 5 秒上滑一次电脑当前目录下出现frame_0.png、frame_5.png等截图文件终端最后打印done。你可以打开截图确认画面确实在变化这就证明「滑动 内容识别截图存档」这条链路跑通了。关于内容识别如果你想让 Agent 不只是截图而是真的「看懂」当前视频在讲什么可以把截图交给模型做多模态理解或者用 ADB 抓取 UI 树adb shell uiautomator dump /sdcard/ui.xml adb pull /sdcard/ui.xml .ui.xml里包含当前界面的控件文本Agent 可以据此判断是广告、直播还是普通视频再决定是继续滑还是停留。这一步是把「自动刷」升级成「智能刷」的关键也是 OpenClaw 式玩法的核心差异点。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth排错要按层定位不要一上来就重装。下面是我实际踩过的几类报错和对应处理。第一类401 Unauthorized。这几乎都是 Key 或 Base URL 的问题。检查三件事Key 有没有复制完整前后不能有空格、Base URL 是不是写成了带 UTM 的地址应该用https://taotoken.net/api、请求头是不是Authorization: Bearer sk-xxx格式。如果 Key 是在控制台刚创建的确认没有误删。API Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 可以对照检查。第二类local proxy failed或连接超时。这类报错通常出现在客户端配置了本地代理但代理没启动或者 Base URL 指向了一个不可达的地址。处理方式先把客户端里的代理设置清空Base URL 直接填https://taotoken.net/api不要经过任何中间层。如果你在公司网络下确认网络策略允许访问该域名。第三类reading choices相关报错比如cannot read property choices of undefined。这说明请求发出去了但返回体结构不对常见原因是模型 ID 写错服务端返回了错误对象而不是正常的 completions 结构。解决方式先用第 4 节的 curl 命令单独测确认返回里有choices数组再把同一个模型 ID 填回客户端。模型 ID 可以在模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 里确认。第四类OAuth相关报错。有些工具默认走 OAuth 登录流程但你要用的是 API Key 模式两者混用就会报错。处理方式在工具的认证设置里明确选择「API Key」而不是「OAuth」然后把 Base URL、Key、Model ID 三件套填全。Codex 的auth.json、Cline 的 MCP 配置、Claude Code 的接入配置都属于这一类任何一个字段缺失都会触发认证失败。Claude Code 的完整接入步骤在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里有说明。第五类ADB 层的device unauthorized或no devices found。这跟模型无关纯粹是 USB 调试没授权或数据线只供电不传数据。换一根能传数据的线手机上重新点「允许 USB 调试」再adb kill-server重启。6. 把链路固定下来从一次性脚本到可复用 Agent跑通一次不难难的是让它稳定复用。我的做法是把 ADB 连接检查、抖音启动、滑动循环、截图存档封装成一个函数参数化滑动次数和间隔这样换设备、换分辨率时只改坐标参数。坐标换算可以用adb shell wm size拿到宽高然后按比例算比如 1080x2400 的屏幕上滑起点 y 取 0.67 倍高度、终点取 0.25 倍高度。模型这一层把 Base URL、Key、Model ID 写进环境变量而不是硬编码在脚本里这样换 Key 不用改代码。长期跑编码和 Agent 任务的话Coding Plan 页面 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 有更合适的调用方案。需要临时验证模型对某段 ADB 脚本的理解就去模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 手动测一轮确认没问题再写进自动化流程。最后提醒一句自动化脚本跑起来之后手机最好保持常亮并关掉自动锁屏否则滑动到一半屏幕黑了ADB 的 input 事件会打到锁屏界面上。这个坑我在第一次跑的时候踩过截图全是黑屏排查了半天才发现是锁屏导致的。把开发者选项里的「保持唤醒」打开问题就没了。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑