云手机 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_KEYSECRET_KEYWS_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 小时前
超自动化安全中的威胁狩猎
运维·安全·自动化
Alan_6914 小时前
聊聊 Swagger/Postman/Apifox 的真实选型与 Python 项目实战
python·测试工具·postman
智慧物业老杨5 小时前
物业绿化数智化权责管控方案:基于工单平台的双层权限追溯模块落地实践
python
曦尧6 小时前
InfiniteTalk:音频驱动的无限时长说话视频生成框架
ai·自动化
wenzhangli76 小时前
oodAgent 4.0 Skills分布式调度 — 从Code Agent实战看自主维护的Agent网络
运维·网络·人工智能·自动化
Metaphor6926 小时前
使用 Python 在 Word 文档中添加批注
python·word
FreakStudio6 小时前
WIZnet 开源方案分享:W55MH32 开发板 + 小智 AI实现以太网版本的小智机器人
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
会周易的程序员6 小时前
使用 pybind11 封装 C++ 日志库 microLog 为 Python 模块
java·c++·python·物联网·架构·日志·aiot
K姐研究社7 小时前
OiiOii 2.0 实测 – 智能画布实现 AI 视频创作自动化
运维·人工智能·自动化