当前位置: 首页 > article >正文

python中使用pymobiledevice3与手机交互(一)获取udid

【获取手机的udid】

首先使用python中的模块pymobiledevice3,

import pymobiledevice3

在该模块中可以继续引用,例如,usbmux,

import pymobiledevice3.usbmux

使用pymobiledevice3.usbmux.list_devices()方法可以获取数据:

[MuxDevice(devid=66, serial='00008020-001828440A69002E', connection_type='USB'), MuxDevice(devid=65, serial='00008020-001828440A69002E', connection_type='Network'), MuxDevice(devid=57, serial='f89d929e8c45a81c0fe2d22f80c1a36e227e90ef', connection_type='Network'), MuxDevice(devid=49, serial='f89d929e8c45a81c0fe2d22f80c1a36e227e90ef', connection_type='USB')]

手机多的话不知道哪个对应哪个手机对应哪个udid,因为返回的数据里面没有手机名字字段,不太方便。

然后使用libimobiledevice,libimobiledevice 是一个 C 库,通常需要通过绑定库来与 Python 进行交互。由于目前并没有官方的 Python 绑定库,所以使用 subprocess 来调用 libimobiledevice:

def get_device_udid_through_libimobiledevice():
    try:
        result = subprocess.run('ideviceinfo -k DeviceName && ideviceinfo -k UniqueDeviceID', shell=True, stdout=subprocess.PIPE, text=True)
        if result.returncode == 0:
            return result.stdout
    except Exception as e:
        print(f"出错了{e}")
    return None

得到的结果是:

iPhone123
f89d12348c45a8156782d22f80c1a36e12349012

目前看满足需求,但当我连接两个手机时,问题来了,只显示或者说只获得了最后连接到电脑的手机的信息,尝试多次都是这样。

之后尝试使用subprocess调用pymobiledevice3:

def get_device_udid_through_pymobiledevice3(device_name, connect_type):
    """
    :param device_name: 设备名称,例如,iPhonexxx
    :param connect_type:连接类型,例如,USB
    :return:获取对应设备的udid
    """
    try:
        result = subprocess.run(['pymobiledevice3', 'usbmux', 'list'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
        if result.returncode == 0:
            devices = json.loads(result.stdout)
            device_udid = None
            for device in devices:
                if device['DeviceName'] == device_name and device['ConnectionType'] == connect_type:
                    device_udid = device['UniqueDeviceID']
                    break
            return device_udid
    except Exception as e:
        print(f"出错了:{e}")
    return None

分别指定不同设备的名字都可以返回对应设备的udid,符合要求。

【总结】

如果只跑一个手机的自动化,需要获取udid,可以使用libimobiledevice,执行速度快,可以很快返回结果;如果跑多个手机的自动化,需要获取udid,建议使用pymobiledevice3,可以满足需求,缺点是速度较慢,返回结果需要几秒钟。


http://www.kler.cn/news/368345.html

相关文章:

  • BitNet: Scaling 1-bit Transformers for Large Language Models
  • Netty-TCP服务端粘包、拆包问题(两种格式)
  • 力扣 167. 两数之和 II - 输入有序数组
  • Java中的Java EE是什么?它有哪些应用场景和优势?
  • Ovis: 多模态大语言模型的结构化嵌入对齐
  • 逻辑回归与神经网络
  • 【C++】函数的返回、重载以及匹配、函数指针
  • 线程池(重要)
  • 位运算算法及习题 ,丢弃的数字 , 两整数之和 ,只出现一次的数字II
  • Java 线程池:深入理解与高效应用
  • C语言 | Leetcode C语言题解之第515题在每个树行中找最大值
  • 《Knowledge Graph Enhanced Multimodal Transformer for Image-Text Retrieval》中文校对版
  • NtripShare Cloud平台之CORS服务之基准站RTCM坐标编辑
  • Apache paino DML操作实战
  • Python数据分析——Numpy
  • Git快速上手
  • Java实现 itext PDF文件打印水印(文字和图片水印)
  • Vue前端开发:双向数据绑定之v-model与修饰符
  • 基于STM32的水产品运输监测系统设计与实现
  • 湖南(满意度调查)源点咨询 市场调研中定量调研方式的运用技巧
  • 使用ceph-csi把ceph-fs做为k8s的storageclass使用
  • 基于vite和vue3、 eslint、prettier、stylelint、husky规范
  • Python实现贝叶斯优化器(Bayes_opt)优化简单循环神经网络分类模型(SimpleRNN分类算法)项目实战
  • count(1)、count(*)、count(主键)、count(字段)区别
  • openlayers 封装加载本地geojson数据 - vue3
  • git stash和git stash pop