Python - 雷电模拟器控制台(Dnconsole)

1.Dnconsole控制台

雷电模拟器9.0

雷电模拟器9.0,32+64位并行,支持对画质、性能要求较高的一类游戏。关于使用Python实现雷电模拟器的控制代码,主要适用于雷电模拟器9.0版本。不同的模拟器版本的控制台程序命名也不同(9.0版本为“ldconsole.exe”),可以使用的指令也不同,通常越新的版本可使用的命令越多。

雷电模拟器官网:https://www.ldmnq.com/

2.Dnconsole模块代码(Python)

控制台类构造方法:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import osclass Dnconsole:'''【雷电控制台类】version: 9.0import该文件会自动实例化为 Dc'''def __init__( self, installation_path:str ):'''【构造方法】'''# if 模拟器安装路径存在性检测if os.path.exists(installation_path) is False:print('模拟器安装路径不存在!')# 获取模拟器安装路径self.ins_path = installation_path# Dnconsole程序路径self.console_path = self.ins_path + r'\ldconsole.exe '# if Dnconsole程序路径检测if os.path.exists(self.console_path) is False:print('Dnconsole程序路径不存在!\n请确认模拟器安装文件是否完整或模拟器版本是否不符!')# adb程序路径self.adb_path = self.ins_path + r'\adb.exe '# if adb程序路径检测if os.path.exists(self.adb_path) is False:print('Dnconsole程序路径不存在!\n请确认模拟器安装文件是否完整!')# 模拟器截屏程序路径self.screencap_path = r'/system/bin/screencap'# 模拟器截图保存路径self.devicess_path = r'/sdcard/autosS.png'# 本地图片保存路径self.images_path = r'D:\PycharmWorkspace\images'# 构造完成print('Class-Dnconsole is ready.(%s)' % (self.ins_path))

控制台执行:

    def CMD( self, cmd:str ):'''【执行控制台命令语句】:param cmd: 命令:return: 控制台调试内容'''CMD = self.console_path + cmd # 控制台命令process = os.popen(CMD)result = process.read()process.close()return resultdef ADB( self, cmd:str ):'''【执行ADB命令语句】:param cmd: 命令:return: 控制台调试内容'''CMD = self.adb_path + cmd # adb命令process = os.popen(CMD)result = process.read()process.close()return result

关闭模拟器:

    def quit( self, index:int = 0 ):'''【关闭模拟器】:param index: 模拟器序号'''cmd = 'quit --index %d' %(index)self.CMD(cmd)def quitall(self):'''【关闭所有模拟器】'''cmd = 'quitall'self.CMD(cmd)

启动模拟器:

    def launch( self, index:int = 0 ):'''【启动模拟器】:param index: 模拟器序号:return: True=已启动 / False=不存在'''cmd = 'launch --index %d' %(index)if self.CMD(cmd) == '': return Trueelse: return False

重启模拟器:

    def reboot( self, index:int = 0 ):'''【重启模拟器】:param index: 模拟器序号:return: 控制台调试内容'''cmd = 'reboot --index %d' %(index)return self.CMD(cmd)

查看模拟器列表:

    def list(self):'''【获取模拟器列表(仅标题)】:return: 控制台调试内容'''cmd = 'list'return self.CMD(cmd)

查看模拟器运行状态:

    def runninglist(self):'''【获取正在运行的模拟器列表(仅标题)】:return: 控制台调试内容'''cmd = 'runninglist'return self.CMD(cmd)def isrunning( self, index:int = 0 ):'''【检测模拟器是否启动】:param index: 模拟器序号:return: True=已启动 / False=未启动'''cmd = 'isrunning --index %d' %(index)if self.CMD(cmd) == 'running': return Trueelse: return False

查看模拟器详细信息列表:

    def list2(self):'''【取模拟器列表】:return: 列表(索引、标题、顶层句柄、绑定句柄、是否进入android、进程PID、VBox进程PID)'''cmd = 'list2'return self.CMD(cmd)

添加、复制、移除及重命名模拟器:

    def add( self, name:str ):'''【添加模拟器】:param name: 新模拟器标题:return: 控制台调试内容'''cmd = 'add %s' %(name)return self.CMD(cmd)def copy( self, name:str, index:int ):'''【复制模拟器】:param name: 新模拟器标题:param index: 原模拟器序号:return: 控制台调试内容'''if not name:cmd = 'copy --from %d' %(index)else:cmd = 'copy --name %s --from %d' %(name, index)return self.CMD(cmd)def remove( self, index:int ):'''【移除模拟器】:param index: 模拟器序号:return: 控制台调试内容'''cmd = 'remove --index %d' %(index)return self.CMD(cmd)def rename( self, index:int, newtitle:str ):'''【重命名模拟器】:param index: 模拟器序号:param newtitle: 模拟器新标题:return: 控制台调试内容'''cmd = 'rename --index %d --title %s' %(index, newtitle)return self.CMD(cmd)

修改模拟器配置:

    def modifyResolution( self, index:int, width, height, dpi ):'''【修改模拟器配置 - 分辨率】:param index: 模拟器序号:param width: 显示宽度:param height: 显示高度:param dpi: 每英寸点数:return: 控制台调试内容'''cmd = 'modify --index %d --resolution %s,%s,%s' %(index, width, height, dpi)return self.CMD(cmd)def modifyCPU( self, index:int, cpu, memory ):'''【修改模拟器配置 - CPU与内存】:param index: 模拟器序号:param cpu: 模拟器CPU数量(1,2,3,4):param memory: 模拟器内存大小(256,512,768,1024,1536,2048,3072,4096,6144,8192):return: 控制台调试内容'''cmd = 'modify --index %d --cpu %s --memory %s' %(index, cpu, memory)return self.CMD(cmd)def modifyManufacturer( self, index:int, manufacturer, model, pnumber ):'''【修改模拟器配置 - 制造商信息】:param index: 模拟器序号:param manufacturer: 制造商:param model: 型号:param pnumber: 电话号码:return: 控制台调试内容'''cmd = 'modify --index %d --manufacturer %s --model %s --pnumber %s' %(index, manufacturer, model, pnumber)return self.CMD(cmd)def modifyOthers( self, index:int, autorotate, lockwindow, root ):'''【修改模拟器配置 - 其他选项】:param index: 模拟器序号:param autorotate: 自动旋转(1/0):param lockwindow: 锁定窗口(1/0):param root: ROOT(1/0):return: 控制台调试内容'''cmd = 'modify --index %d --autorotate %s --lockwindow %s --root %s' %(index, autorotate, lockwindow, root)return self.CMD(cmd)

App控制:

    def installappOfFile( self, index:int, filename:str ):'''【安装App(用文件名)】:param index: 模拟器序号:param filename: 文件名:return: 控制台调试内容'''cmd = 'installapp --index %d --filename %s' %(index, filename)return self.CMD(cmd)def installappOfPkg( self, index:int, packagename:str):'''【安装App(用包名)】:param index: 模拟器序号:param packagename: 包名:return: 控制台调试内容'''cmd = 'installapp --index %d --packagename %s' %(index, packagename)return self.CMD(cmd)def uninstallapp( self,index:int, packagename:str ):'''【卸载App】:param index: 模拟器序号:param packagename: 包名:return: 控制台调试内容'''cmd = 'uninstallapp --index %d --packagename %s' %(index, packagename)return self.CMD(cmd)def runApp( self, index:int, packagename:str ):'''【运行App】:param index: 模拟器序号:param packagename: 包名:return: 控制台调试内容'''cmd = 'runapp --index %d --packagename %s' %(index, packagename)return self.CMD(cmd)def killApp( self, index:int, packagename:str ):'''【终止App】:param index: 模拟器序号:param packagename: 包名:return: 控制台调试内容'''cmd = 'killapp --index %d --packagename %s' %(index, packagename)return self.CMD(cmd)

模拟操作模拟器:

    def actionOfInput( self, index:int, text:str ):'''【输入操作】:param index: 模拟器序号:param text: 文本内容:return: 控制台调试内容'''cmd = 'action --index %d --key call.input --value "%s"' %(index, text)return self.CMD(cmd)def actionOfKeyboard( self, index:int, key:str ):'''【按键操作】:param index: 模拟器序号:param key: 键值(back,home,menu,volumeup,volumedown):return: 控制台调试内容'''cmd = 'action --index %d --key call.keyboard --value %s' %(index, key)return self.CMD(cmd)def actionOfShake( self, index:int ):'''【摇一摇操作】:param index: 模拟器序号:return:'''cmd = 'action --index %d --key call.shake --value null' %(index)return self.CMD(cmd)def actionOfRebootApp(self,index:int, packagename:str):'''【重启模拟器和App】:param index: 模拟器序号:param packagename: 包名:return: 控制台调试内容'''cmd = 'action --index %d --key call.reboot --value %s' %(index, packagename)return self.CMD(cmd)def actionOfLocate( self, index:int, Lng, Lat ):'''【定位操作】:param index: 模拟器序号:param Lng: 经度:param Lat: 维度:return: 控制台调试内容'''cmd = 'action --index %d --key call.locate --value %f,%f' %(index, Lng, Lat)return self.CMD(cmd)def actionOfNetwork( self, index:int, ifconnect:bool ):'''【网络断连操作】:param index: 模拟器序号:param ifconnect: 是否连网(True/False):return: 控制台调试内容'''if ifconnect:cmd = 'action --index %d --key call.network --value connect' %(index)else:cmd = 'action --index %d --key call.network --value offline' %(index)return self.CMD(cmd)def actionOfGravity(self, index:int, x:int, y:int, z:int):'''【改变重力感应操作】:param index: 模拟器序号:param x: x:param y: y:param z: z:return: 控制台调试内容'''cmd = 'action --index %d --key call.gravity --value %d,%d,%d' %(index, x, y, z,)return self.CMD(cmd)def scan( self, index:int, filepath:str ):'''【扫描二维码】:param index: 模拟器序号:param filepath: 图片路径:return: 控制台调试内容'''cmd = 'scan  --index %d --file %s' %(index, filepath)return self.CMD(cmd)

对模拟器窗口排版:

    def sortWnd(self):'''【对模拟器窗口排版】'''cmd = 'sortWnd'self.CMD(cmd)

文件操作:

    def pull( self, index:int, remote:str, local:str ):'''【复制文件】:param index: 模拟器序号:param remote: 模拟器文件路径:param local: 本地路径:return: 控制台调试内容'''cmd = 'pull  --index %d --remote %s --local %s' %(index, remote, local)return self.CMD(cmd)def push( self, index:int, remote:str, local:str ):'''【发送文件】:param index: 模拟器序号:param remote: 模拟器文件路径:param local: 本地路径:return: 控制台调试内容'''cmd = 'push  --index %d --remote %s --local %s' %(index, remote, local)return self.CMD(cmd)

全局设置:

    def globalSetting( self, fps:int, audio:int, fastplay:int, cleanmode:int ):'''【全局设置】:param fps: 帧率(0~60):param audio: 音频(1=开/0=关):param fastplay: 高帧率模式(1=开/0=关):param cleanmode: 除广告模式(1=开/0=关):return: 控制台调试内容'''cmd = 'globalsetting --fps %d --audio %d --fastplay %d --cleanmode %d' %(fps, audio, fastplay, cleanmode)return self.CMD(cmd)

启动模拟器及App(新命令):

    def launchx( self, index:int, packagename:str ):'''【同时启动模拟器和App】:param index: 模拟器序号:param packagename: 包名:return: 控制台调试内容'''cmd = 'launchex --index %d --packagename "%s"' %(index, packagename)return self.CMD(cmd)

查看连接的设备:

    def device(self):'''【列出所有连接的设备】:return: 控制台调试内容'''cmd = 'devices -l'return self.ADB(cmd)

连接/断开设备:

    def connect( self, ip:str, port:str ):'''【连接设备】:param ip: ip地址:param port: 端口号:return: 控制台调试内容'''cmd = 'connect %s:%s' %(ip, port)return self.ADB(cmd)def disconnect( self, ip:str, port:str ):'''【断开设备】:param ip: ip地址:param port: 端口号:return: 控制台调试内容'''if ip != '' and port != '':cmd = 'disconnect %s:%s' %(ip, port)elif ip != '' and port == '':cmd = 'disconnect %s' %(ip)else:cmd = 'disconnect'return self.ADB(cmd)

查看adb版本:

    def versionOfADB(self):'''【查看ADB版本号】:return: 控制台调试内容'''cmd = 'version'return self.ADB(cmd)

查看设备相关:

    def dumpstate( self, index:int ):'''【获取设备系统状态信息(需要root权限)】:param index: 模拟器序号:return: 控制台调试内容'''cmd = 'adb --index %d --command "shell dumpstate"' %(index)return self.CMD(cmd)def getPackageList( self, index:int ):'''【获取设备包名列表】:param index: 模拟器序号:return: 包名列表'''cmd = 'adb --index %d --command "shell pm list package"' %(index)return self.CMD(cmd)def getResolution( self, index:int ):'''【获取设备分辨率】:param index: 模拟器序号:return: 分辨率(例如'1920x1080')'''cmd = 'adb --index %d --command "shell wm size"' %(index)return self.CMD(cmd).replace('Physical size: ', '')

截屏(并保存截图到PC本地):

    def screenShot ( self, index:int ):'''【截屏并保存到本地】:param index: 模拟器序号'''cmd1 = 'adb --index %d --command "shell %s -p %s"' %(index, self.screencap_path, self.devicess_path)cmd2 = 'adb --index %d --command "pull %s %s"' %(index, self.devicess_path, self.images_path)self.CMD(cmd1)self.CMD(cmd2)

查看App信息:

    def appVersion( self, index:int, packagename:str ):'''【获取App版本号】:param index: 模拟器序号:param packagename: 包名:return: 控制台调试内容'''cmd = 'adb --index %d --command "shell dumpsys package %s|grep versionName"' %(index, packagename)return self.CMD(cmd)def appIsrunning( self, index:int, packagename:str ):'''【获取App运行状态】:param index: 模拟器序号:param packagename: 包名:return: 控制台调试内容'''cmd = 'adb --index %d --command "shell pidof %s"' %(index, packagename)return self.CMD(cmd)

模拟操作模拟器(adb命令):

    def actionOfTap( self, index:int, x:int, y:int ):'''【点击操作】:param index: 模拟器序号:param x: x:param y: y:return: 控制台调试内容'''cmd = 'adb --index %d --command "shell input tap %d %d"' %(index, x, y)return self.CMD(cmd)def actionOfSwipe( self, index:int, x0:int, y0:int, x1:int, y1:int, ms:int = 200 ):'''【滑动操作】:param index: 模拟器序号:param x0,y0: 起点坐标:param x1,y1: 终点坐标:param ms: 滑动时长:return: 控制台调试内容'''cmd = 'adb --index %d --command "shell input swipe %d %d %d %d %d"' %(index, x0, y0, x1, y1, ms)return self.CMD(cmd)def actionOfKeyCode( self, index:int, keycode:int ):'''【键码输入操作】:param index: 模拟器序号:param keycode: 键码(0~9,10=空格):return: 控制台调试内容'''try:list = ['KEYCODE_0', 'KEYCODE_1', 'KEYCODE_2', 'KEYCODE_3', 'KEYCODE_4', 'KEYCODE_5','KEYCODE_6', 'KEYCODE_7', 'KEYCODE_8', 'KEYCODE_9', 'KEYCODE_HOME']cmd = 'adb --index %d --command "shell input keyevent %s"' %(index, list[keycode])return self.CMD(cmd)except Exception as e:print(e)

实例化控制台类:

# 实例化控制台类
global Dc
Dc = Dnconsole(r'D:\Games\leidian9.0.35\LDPlayer9.0.35')

Python - 控制雷电模拟器(Dnconsole)相关推荐

  1. python控制雷电模拟器 代码修复

    from concurrent.futures import thread import winreg, os ,time # 雷电模拟器自动获取目录使用 import random #------- ...

  2. 【k.11】python+appium+雷电模拟器 app自动化测试 demo 教学

    一.首页讲解一下每个部分的作用: 1.雷电模拟器相当于一台手机,里面安装被测试的软件app 2.appium相当于一个链接python脚本和雷电模拟器的桥梁 3.python,编写控制app的脚本代码 ...

  3. 雷电模拟器dnconsole命令汇总

    雷电模拟器之文件操作 删除相册中的文件 ldconsole adb --index 0 --command "shell rm /sdcard/DCIM/1.png" 雷电模拟器应 ...

  4. python mitmproxy +雷电模拟器 安装

    第一步 安装mitmproxy 首先在安装好python 的情况下 pip install mitmproxy 第二步 电脑端安装证书 进入这个目录下   如果没有就重新mitmproxy 点击mit ...

  5. 通过uiautomator2控制雷电模拟器里的程序

    参考 Python+雷电模拟器实现安卓自动控制 python版本 截至到写这篇文章的时候, 不要用python3.8 uiautomator2还不支持python3.8 后面的weditor也不支持 ...

  6. python控制手机模拟器_Appium+python自动化之连接模拟器并启动淘宝APP(超详解)...

    简介 上一篇讲解完模拟器的安装.配置好以后,就好比我们手机已经买好,并且系统已经做好了,就差我们用数据线和电脑连接开始实战了,这篇宏哥就带着小伙伴们和童鞋们趁热打铁,讲解和分享一下如何连接模拟器(电脑 ...

  7. 雷电模拟器python编程接口_【Python】雷电模拟器说明[附代码]

    [Python] 纯文本查看 复制代码class Dnconsole: # 请根据自己电脑配置 console = 'D:\\Changzhi\\dnplayer2\\dnconsole.exe ' ...

  8. python控制手机模拟器_Appium+python自动化23-Android夜神模拟器

    前言 Android SDK虽然也自带了模拟器,但是那速度会让你怀疑人生,并且不稳定经常卡死异常.夜神模拟器可以说是android模拟器里面的一个神器. 环境安装 2.夜神安卓模拟器(夜神模拟器),是 ...

  9. python+appium+雷电模拟器 app自动化测试

    一.环境准备  1.jdk1.8 2.android-sdk-windows 3.appium-desktop-setup-1.11.0(直接搜索appium进入官网下载) 4.Appium-Pyth ...

最新文章

  1. Gardener and Tree 图论,树,队列
  2. 线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。
  3. Android之父深入解析Android
  4. 11.28 String类
  5. 春招 | 风控独角兽 数美科技 NLP、ASR算法工程师 - 25k-35k/月
  6. MOSS 2010:Visual Studio 2010开发体验(23)——编写自定义的BCS连接器
  7. 【不积跬步,无以致千里】五个常用的Linux监控脚本代码
  8. 各国语言缩写-各国语言简称,世界各国域名缩写
  9. 转载一篇过来人谈的大学期间关于课外学习的意见lt;出自左飞老师笔记gt;
  10. Vue [WDS] Disconnected 异常
  11. 微信支付API v3接口使用应用篇
  12. Linux网络之DNS域名解析概述
  13. 幽默段子~整理(我们是大自然的搬运工)
  14. 第09章_MySQL子查询
  15. 来自大数据的反思:需要你读懂的10个小故事 三
  16. nvidia显卡控制面板的安装位置
  17. 07夯实基础之JavaEE基础
  18. 无边界安全成新趋势,志翔科技推出首个体系化“无边界”安全产品
  19. 计算机网络脆弱性评估技术研究
  20. android指纹解锁动画,Android8.1 SystemUI Keyguard之指纹解锁流程

热门文章

  1. n76e003引脚图_N76E003学习之路(二)
  2. 黑帽SEO与黑帽技术
  3. 深度学习(Deep Ritz,Galerkin,PINN)求解偏微分方程(PDE)实现代码地址
  4. 启动tomcat提示端口号被占用 Serveral ports(8005,8080,8009) required by Tomcat v8.0 Server at localhost are alre
  5. 重磅利好!中国电信发布5G时代区块链智能手机白皮书,华为小米也将受益
  6. 官方股票交易接口有什么功能?
  7. [原创] 如何给Blog 添加 计数器 和 广告
  8. 小米手机拦截返回音设置不了_要怎样设置才让对方打电话进来是空号?
  9. Kubernetes基于canel的网络策略
  10. 贪心算法-----poj 3253 Fence Repair(切木板)