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

这篇具有很好参考价值的文章主要介绍了Python - 控制雷电模拟器(Dnconsole)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 os

class Dnconsole:
    '''
    【雷电控制台类】
    version: 9.0
    import该文件会自动实例化为 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 result


    def 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 True
        else: 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 True
        else: 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)

实例化控制台类:文章来源地址https://www.toymoban.com/news/detail-401698.html

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

到了这里,关于Python - 控制雷电模拟器(Dnconsole)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 雷电9模拟器安装magisk和lsposed

    之前一直用真机搭建测试环境,今天看到正己大佬的 《安卓逆向这档事》之模拟器环境搭建 视频教程,看到其中推荐了 适用于几乎所有安卓模拟器(7+)安装magisk的教程-简单无脑向 这个教程,其实之前就看过这个大佬的教程,无奈我的模拟器版本可能不对,一直安装不成功,

    2024年02月02日
    浏览(55)
  • vmare 虚拟机上安装雷电模拟器的解决

    自已有一个需求:需要在虚拟机,需要在上面安装一下模拟器3.0; 环境: vmare老版本:6.0~7.0 虚拟机系统:windows7 旗舰版 64位 遇到问题: 1. 没有开启VT-x。 分析:原来的vmare是低版本好像是 vmare7;没有Intel VT-x选项选择。 我的解决方法: 升级vmare为Vmware Workstation 16 Pro; 把当

    2024年02月06日
    浏览(90)
  • 雷电模拟器运行非常卡顿有效解决方法分享

    雷电模拟器运行非常卡顿有效解决方法分享。有用户在电脑上开启雷电模拟器来使用的时候,遇到了软件使用非常卡顿的情况。那么这样的软件卡顿问题要怎么去进行处理呢?接下来我们一起来看看以下的解决方法教学吧。 雷电模拟器卡顿的解决方法 一、关闭360核晶防护 打

    2024年02月05日
    浏览(59)
  • windows Vscode运行Flutter项目,雷电模拟器

    全流程参考链接  官网配置windows 的 flutter运行环境  !!! 1、安装jdk 11并配置全局环境变量 官网下载JAVA的JDK11版本(下载、安装、配置环境变量)_java11下载_云边的快乐猫的博客-CSDN博客 2、下载安装Flutter SDK: (1)版本选择(windows:Stable channel稳定版本,3.7.7) Flutter SD

    2024年02月06日
    浏览(42)
  • 【解决方案】adb无法连接雷电模拟器问题

    目录 雷霆9问题(安卓9.0) 雷霆5问题 (安卓7.0) 问题一:adb 提示adb server version(31) doesn\\\'t match this client(41)  问题二:more than one device and emulator 必须开启调试模式(默认为关闭) 解决办法:使用雷电模拟器安装目录下的adb.exe,位置这样找。 执行adb logcat后会得到这个日志

    2024年02月07日
    浏览(176)
  • HBuilderX 运行Android App项目至雷电模拟器

    一、下载安装HBuilderX         HBuildeX官网         安装最新的正式版,或者点击历史版本查看更多版本;【ps:Alpha版本为开发版,功能更多,但是也不稳定,属于测试版本】         直接将压缩包解压,运行HBuildeX即可。 二、下载安装雷电模拟器          雷电模拟器

    2024年02月03日
    浏览(54)
  • 雷电9模拟器安装抓包工具whistle证书

    抓某游戏内的包,普通的下载证书,访问会出现白板情况 这里证书选择的是 .pem 格式的, .cer 格式的证书也是可以的,将证书下载到电脑上. 文件名称大概就是 rootCA.pem  openssl下载地址 这里算出了当前证书的名称,修改证书  rootCA.pem 为 b09ba***.0 ,证书  .pem 改成 .0 1.adb remount 2.ad

    2024年02月15日
    浏览(49)
  • emulator-5554 device adb 雷电模拟器9.0.11

    首先,雷电模拟器9的安装文件夹里面自带adb。默认允许adb本地调试,但是没有默认开启root权限且运行自带的adb后会自动连接到雷电。 所以首先开启root权限,然后选择重启。 进入文件夹,运行自带的adb: adb start-server ,不要直接 adb connect 127.0.0.1:5555 如上,直接 adb shell ,然后

    2024年02月13日
    浏览(66)
  • 雷电模拟器(安卓9)将bp证书安装为系统证书

    在安卓7.0以上的系统版本中,app默认不信任用户安装的证书,只默认信任系统证书,需要将bp证书导入在系统证书内。 1.导出bp证书 2.转换证书格式 这里直接用kali内的工具进行转换 将cacert.pem证书重命名为:9a5ba575.0 (上面计算的值) 3.使用adb上传证书至模拟器 打开雷电模拟

    2024年01月20日
    浏览(45)
  • 安卓判断是否是模拟器,适配主流雷电,MUMU,夜神,逍遥

    前言 最近游戏项目组又有新的要求,对于数据上报和数据统计接口,尽可能的具体化,比如是否是模拟器,模拟器的型号,品牌等,都要求统计,后续模拟器玩家在活动发放,安全风控等方面也易于分析和把控。 实现 在网上搜了搜,大概思路是: 1:模拟器的cpu是x86,arm的

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包