欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > python中使用pymobiledevice3与手机交互(一)获取udid

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

2024/10/28 1:13:27 来源:https://blog.csdn.net/zhang_jiamin/article/details/143183569  浏览:    关键词: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.stdoutexcept 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 = Nonefor device in devices:if device['DeviceName'] == device_name and device['ConnectionType'] == connect_type:device_udid = device['UniqueDeviceID']breakreturn device_udidexcept Exception as e:print(f"出错了:{e}")return None

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

【总结】

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com