main.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import subprocess
  2. from time import sleep
  3. from pymobiledevice3.lockdown import create_using_usbmux
  4. from pymobiledevice3.services.dvt.instruments.process_control import ProcessControl
  5. from pymobiledevice3.services.installation_proxy import InstallationProxyService
  6. from pymobiledevice3.services.dvt.dvt_secure_socket_proxy import DvtSecureSocketProxyService
  7. from pymobiledevice3.services.remote_fetch_symbols import RemoteService
  8. from pymobiledevice3.remote.remote_service_discovery import RemoteServiceDiscoveryService
  9. import threading
  10. BUNDLE_ID = 'com.laiwang.DingTalk'
  11. # def channel():
  12. # pymobiledevice3 remote start-tunnel
  13. # while True:
  14. # # RemoteService.connect()
  15. if __name__ == '__main__':
  16. try:
  17. # 启动隧道服务线程
  18. remoteServvice = RemoteService(RemoteServiceDiscoveryService(('127.0.0.1',7777)),'test')
  19. remoteServvice.connect()
  20. # 使用命令方式启动管道
  21. # try:
  22. # # 使用 -S 参数让 sudo 从 stdin 读取密码
  23. # result = subprocess.run(
  24. # ["sudo", "-S"] + "pymobiledevice3 remote start-tunnel".split(),
  25. # input="d123456\n", # 实际应用中应从安全来源获取
  26. # text=True,
  27. # capture_output=True,
  28. # check=True
  29. # )
  30. # print("命令执行成功!")
  31. # print("输出:", result.stdout)
  32. # except subprocess.CalledProcessError as e:
  33. # print(f"命令执行失败 (退出码: {e.returncode}):")
  34. # print("错误输出:", e.stderr)
  35. sleep(3)
  36. # 连接手机
  37. lockdown = create_using_usbmux()
  38. print("开发者模式",lockdown.developer_mode_status)
  39. # 获取钉钉-app
  40. with InstallationProxyService(lockdown) as installer:
  41. # 查找特定应用
  42. ddApp = [app for app in installer.get_apps() if 'DingTalk' in app]
  43. if len(ddApp):
  44. print("找到包",ddApp[0])
  45. if ddApp[0] == BUNDLE_ID:
  46. # 打开app
  47. with DvtSecureSocketProxyService(lockdown) as dvt:
  48. process_control = ProcessControl(dvt)
  49. pid = process_control.launch(BUNDLE_ID)
  50. print("启动app",pid)
  51. else:
  52. print("包名不匹配")
  53. else:
  54. print("没找到包,请安装钉钉")
  55. except ConnectionError as e:
  56. print(f"连接失败")