云手机 API 自动化实战:Python 批量控机、挂机脚本完整实现

一、前言

1.1 什么是云手机

云手机依托服务器虚拟化、容器化技术,在云端部署完整安卓系统,通过网络推流画面、下发触控指令,实现本地设备远程操控云端安卓实例。区别于本地模拟器,云手机具备 7×24 小时离线运行、不占用本机电量 / 存储、批量多开、独立 IP 隔离等优势,广泛用于手游挂机、APP 自动化测试、账号矩阵运营、移动端 RPA 等场景。

1.2 适用人群

  1. 手游玩家:多账号养号、离线刷副本、资源挂机
  2. 测试开发:APP 兼容性批量测试、UI 自动化脚本调试
  3. 运营从业者:短视频 / 社群多账号矩阵管理
  4. 爬虫 / 自动化开发者:基于 ADB+API 实现批量设备调度

1.3 技术架构简述

主流商用云手机平台均提供两套交互能力:

  1. HTTP REST API:用于设备创建、状态查询、批量管理、应用安装等异步操作
  2. WebSocket 长连接:实时下发点击、滑动、输入等触控指令,低延迟画面推流 本文基于通用云手机 API 规范,提供可直接改造落地的 Python 完整代码,无需底层虚拟化搭建,对接商用平台即可运行。

二、环境依赖准备

2.1 安装 Python 依赖库

bash

运行

复制代码
pip install requests websocket-client json time logging
  • requests:处理 HTTP 接口请求
  • websocket-client:建立长连接下发实时触控指令
  • logging:记录设备运行日志,方便排错

三、完整代码实战

3.1 通用 API 封装类(设备查询、批量管理、应用安装)

python

运行

复制代码
import requests
import json
import logging
import hashlib
from typing import List, Dict

# 日志配置
logging.basicConfig(
    filename="cloud_phone_run.log",
    level=logging.INFO,
    format="%(asctime)s | %(levelname)s | %(message)s",
    encoding="utf-8"
)

# 云平台基础配置(替换为商用平台密钥)
API_BASE = "https://api.cloudphone.service.com"
ACCESS_KEY = "your_access_key"
SECRET_KEY = "your_secret_key"
TIMEOUT = 10

class CloudPhoneApi:
    def __init__(self):
        self.session = requests.Session()

    # 生成接口签名,商用平台通用鉴权逻辑
    def get_sign(self) -> str:
        raw_str = f"{ACCESS_KEY}{SECRET_KEY}"
        sign = hashlib.md5(raw_str.encode("utf-8")).hexdigest()
        return sign

    # 请求统一请求头
    def get_headers(self) -> Dict:
        return {
            "AccessKey": ACCESS_KEY,
            "Sign": self.get_sign(),
            "Content-Type": "application/json"
        }

    # 获取名下全部云手机设备列表
    def get_all_devices(self) -> List[Dict]:
        url = f"{API_BASE}/device/list"
        try:
            resp = self.session.get(url, headers=self.get_headers(), timeout=TIMEOUT)
            data = resp.json()
            if data.get("code") == 0:
                dev_list = data.get("data", [])
                logging.info(f"获取设备列表成功,共{len(dev_list)}台云手机")
                return dev_list
            else:
                logging.error(f"获取设备失败:{data.get('msg')}")
                return []
        except Exception as e:
            logging.error(f"接口请求异常:{str(e)}")
            return []

    # 查询单台设备在线状态、延迟、电量
    def get_device_status(self, device_id: str) -> Dict:
        url = f"{API_BASE}/device/status"
        params = {"deviceId": device_id}
        try:
            resp = self.session.get(url, headers=self.get_headers(), params=params, timeout=TIMEOUT)
            return resp.json()
        except Exception as e:
            err_msg = f"设备{device_id}状态查询失败:{str(e)}"
            logging.error(err_msg)
            return {"code": -1, "msg": err_msg}

    # 云端静默安装APP
    def install_app(self, device_id: str, package_name: str) -> bool:
        url = f"{API_BASE}/device/{device_id}/app/install"
        body = {
            "package": package_name,
            "silent": True
        }
        try:
            resp = self.session.post(url, headers=self.get_headers(), json=body, timeout=TIMEOUT)
            res = resp.json()
            if res.get("code") == 0:
                logging.info(f"设备{device_id}安装{package_name}指令下发成功")
                return True
            else:
                logging.error(f"安装失败:{res.get('msg')}")
                return False
        except Exception as e:
            logging.error(f"安装接口异常:{str(e)}")
            return False

# 测试入口
if __name__ == "__main__":
    client = CloudPhoneApi()
    # 1. 获取所有设备
    device_list = client.get_all_devices()
    # 2. 遍历查询每台设备状态
    for dev in device_list:
        dev_id = dev.get("deviceId")
        status_info = client.get_device_status(dev_id)
        print(json.dumps(status_info, ensure_ascii=False, indent=2))
        # 3. 示例:给指定设备安装游戏包
        # client.install_app(dev_id, "com.mihoyo.hyperion")

3.2 WebSocket 实时触控指令脚本(点击、滑动、挂机循环)

python

运行

复制代码
import websocket
import json
import time

# 长连接配置
WS_URL = "wss://ws.cloudphone.service.com/control"
DEVICE_ID = "dev_0001"
WS_TOKEN = "your_ws_connect_token"

def on_message(ws, message):
    """接收云端设备执行回调"""
    callback_data = json.loads(message)
    print("云端返回执行结果:", callback_data)

def on_error(ws, error):
    print("WebSocket连接异常:", error)

def on_close(ws, close_code, close_msg):
    print("长连接已断开,关闭码:", close_code, "信息:", close_msg)

def on_open(ws):
    """连接建立后执行挂机循环任务"""
    print("云手机控制通道连接成功,启动挂机脚本")
    # 循环模拟游戏自动任务
    while True:
        # 指令1:点击坐标(300, 800),领取奖励
        click_cmd = json.dumps({
            "deviceId": DEVICE_ID,
            "operateType": "click",
            "x": 300,
            "y": 800
        })
        ws.send(click_cmd)
        time.sleep(3)

        # 指令2:滑动操作,左右切换页面
        swipe_cmd = json.dumps({
            "deviceId": DEVICE_ID,
            "operateType": "swipe",
            "startX": 900,
            "startY": 500,
            "endX": 100,
            "endY": 500,
            "duration": 300
        })
        ws.send(swipe_cmd)
        time.sleep(5)

if __name__ == "__main__":
    websocket.enableTrace(False)
    ws_app = websocket.WebSocketApp(
        f"{WS_URL}?token={WS_TOKEN}&deviceId={DEVICE_ID}",
        on_open=on_open,
        on_message=on_message,
        on_error=on_error,
        on_close=on_close
    )
    # 持续保活连接
    ws_app.run_forever()

四、代码使用说明

  1. 密钥替换:将代码中ACCESS_KEY、SECRET_KEY、WS_TOKEN替换为云手机平台后台申请的凭证;
  2. 设备 ID:从get_all_devices接口返回列表中获取真实设备序列号;
  3. 脚本拆分场景:
    • API 类:用于批量初始化设备、批量装包、定时巡检在线状态;
    • WebSocket 脚本:单设备实时挂机、循环自动任务;
  4. 拓展方向:可结合 uiautomator2、Airtest 实现图像识别自动寻路、任务判断。

五、云手机选型核心评判标准

开发与使用过程中,对比多款云手机产品,筛选优质平台重点看 5 项指标:

  1. API 完善度:是否开放批量创建、批量克隆、远程 ADB 调试接口;
  2. 运行稳定性:7×24 小时挂机是否闪退、断流、强制重启;
  3. 硬件配置:GPU 渲染能力、帧率上限、内存分配;
  4. 隔离安全:独立 IP、指纹隔离,降低账号封禁风险;
  5. 多端适配:电脑、安卓、iOS、网页端能否无缝互通。

六、推荐:傲晨云手机(适配自动化开发 + 手游挂机)

综合 API 支持、稳定性、性价比、多账号运营需求,傲晨云手机是兼顾开发者自动化脚本与普通玩家挂机的优选方案,下面整理其核心优势与功能:

6.1 核心产品优势

  1. 多年稳定老牌厂商,底层虚拟化深度优化,2K 60Hz 稳定满帧运行,长时间挂机无卡顿、闪退、断流问题;
  2. 独立 IP + 设备指纹隔离技术,多账号批量运营大幅降低封号概率,适配手游多开、APP 测试场景;
  3. 不占用本地手机电量、存储空间与流量,本地关机断网云端持续运行,完美适配 7×24 小时离线挂机;
  4. 多端互通,安卓、苹果、电脑、网页端四端无缝切换,一套账号随时随地操控云手机实例;
  5. 高性价比福利,每日签到可领取免费时长与代金券,新用户赠送免费试用时长,批量多开套餐成本更低。

6.2 开发者 & 玩家核心功能

  1. 完整开放 API 接口,支持上文 Python 脚本对接,批量创建、克隆、监控设备,适配自动化测试、RPA 批量运营开发;
  2. 全安卓版本镜像可选:安卓 8/10/12,兼容怀旧手游、新游、海外应用,自带谷歌套件一键安装;
  3. 内置傲晨云管家工具:智能 Root 管理、进程守护、定时重启、隐私进程隐匿,保障脚本长时间稳定运行;
  4. 批量同步操控,一台设备操作同步至全部云手机,批量养号、批量做任务效率大幅提升;
  5. 平板模式、多点触控优化,适配 MMO、回合制、射击类各类手游操作;
  6. 云端数据加密存储,应用数据独立隔离,清理、重置一键完成,隐私安全有保障。

6.3 适用场景总结

  • 开发者:APP 兼容性批量测试、Python/ADB 自动化脚本部署、移动端 RPA 集群;
  • 手游用户:多账号离线挂机、副本刷资源、长期养号、新游开荒;
  • 运营从业者:短视频、社群、电商多账号矩阵统一管理。

七、总结

云手机结合 Python API+WebSocket 能够实现高度自动化的云端安卓集群,大幅降低本地硬件压力与人工操作成本。在实际落地时,平台稳定性、API 开放程度、账号安全隔离是重中之重。傲晨云手机兼顾开发侧接口能力与普通用户挂机体验,配置、稳定性、多开能力均处于第一梯队,无论是写自动化脚本还是日常手游离线托管,都是实用性极强的选择。

附录 FAQ

  1. 代码运行报错接口鉴权失败? 检查 AccessKey、SecretKey 是否复制正确,确认平台后台已开启 API 访问权限。
  2. WebSocket 连接频繁断开? 降低循环指令执行频率,增加 sleep 间隔,同时确认云手机实例未进入休眠。
  3. 自动化脚本能否批量控制 20 台以上设备? 傲晨云手机支持批量多开,搭配文中 API 循环遍历设备 ID,可实现几十台设备统一调度。
相关推荐
卷无止境3 小时前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python
众壹新能源科技4 小时前
逆变器自带无功不够用,加装5MVar SVG后功率因数从0.85回到0.99
运维·人工智能·自动化
滴啦嘟啦哒4 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
全栈练习生5 小时前
AI安全与红队测试
python·ai
费曼学习法5 小时前
把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程
python·ai编程·自动化运维
鸽鸽程序猿5 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
NetX行者5 小时前
Python 工程化入门:从脚本到规范的 Python 项目结构
网络·python
MasonYyp5 小时前
asyncio并发协程
python
小小张说故事6 小时前
Python 的整数为什么永远不会溢出?拆开大整数对象,看 30 位一节的存储与运算代价
python
用户298698530146 小时前
Python 实现 Word 与 TIFF 双向转换的方案
后端·python·api