Python 随机按键模拟2小时


Posted in Python onDecember 30, 2020

案例故事:

Android终端(车载,手机)等,

需要模拟进行随意进行各类按键(车载方向盘按键,手机硬按键)的操作,
测试系统对随机按键事件的响应稳定性,一般测试2小时。

准备阶段

一般是用adb shell input keyevent + KeyCode 来模拟按键事件。
比如adb shell input keyevent 24 可以模拟“音量加键”,
以下是比较常用的几个按键的键值表。

KeyCode 释义
3 Home键
4 返回键
5 电话拨号键
24 音量加键
25 音量减键
26 电源键
27 照相机启动键
87 多媒体下一曲键
88 多媒体上一曲键
91 音量静音键

Python批处理脚本形式

批量处理脚本的特点是:批量顺序执行语句

# coding=utf-8
 
import os
import time
import random
 
TIMEOUT= 7200 # 2小时(7200s) 常量
once_time = time.time() # 获取当前时间戳,并保存到一个变量
keycode_dict = {3: "HOME键", 4: "返回键", 5: "电话拨号键", 24: "音量加键",
        25: "音量减键", 26: "电源键", 27: "照相机启动键", 87: "下一曲键",
        88: "上一曲键", 91: "静音键"}
 
# 循环获取当前时间,与once_time变量做时间戳做减法
while time.time() - once_time <= TIMEOUT:
  # 随机选择字典的某个“键”
  keycode = random.choice(list(keycode_dict.keys()))
  command = "adb shell input keyevent %s" % keycode
  print("成功按下了%s" % keycode_dict[keycode])
  os.system(command)
  time.sleep(0.5) # 间隔0.5s,再进行下一次按键模拟
  print("已经进行了 %d 秒..., 一共需要测试 %d 秒" % (time.time() - once_time, TIMEOUT))
 
os.system("pause")

Python面向过程函数形式

看哪些代码块,可以组成一个具体的功能,
这个案例,可以用input_keyevent(), 代表输入按键事件的功能函数,
这个函数可以接收参数输入,可以指定输入多久的按键事件。

# coding=utf-8
 
import os
import time
import random
 
 
def input_keyevent(timeout):
  once_time = time.time() # 获取当前时间戳,并保存到一个变量
  keycode_dict = {3: "HOME键", 4: "返回键", 5: "电话拨号键", 24: "音量加键",
          25: "音量减键", 26: "电源键", 27: "照相机启动键", 87: "下一曲键",
          88: "上一曲键", 91: "静音键"}
 
  # 循环获取当前时间,与once_time变量做时间戳做减法
  while time.time() - once_time <= timeout:
    # 随机选择字典的某个“键”
    keycode = random.choice(list(keycode_dict.keys()))
    command = "adb shell input keyevent %s" % keycode
    print("成功按下了%s" % keycode_dict[keycode])
    os.system(command)
    time.sleep(0.5) # 间隔0.5s,再进行下一次按键模拟
    print("已经进行了 %d 秒..., 一共需要测试 %d 秒" % (time.time() - once_time, timeout))
 
 
input_keyevent(7200)
os.system("pause")

Python面向对象类形式

1.以"万物皆可归类"的思想, 先抽象化出一个类来,类名一般建议用"名词", 所以我们命名为"KeyeventInputter",代表按键事件输入器, 且一般要驼峰式(首字母大写)来规范类的命名。

2.养成良好的类的初始化(__init__)的习惯,初始化过程中, 可以定义属性,self.keycode_dict。

3.定义方法(函数), input_keyevent函数。
4.类是一个抽象的事物, 必须实例化成具体的对象后,才能进行调用, 所以我们实例化并命名成了k_obj, 表明是一个对象。
5.实例化成具体对象后, 对象就可以调用input_keyevent这个函数了。

# coding=utf-8
 
import os
import time
import random
 
 
class KeyeventInputter():
  def __init__(self):
    self.keycode_dict = {3: "HOME键", 4: "返回键", 5: "电话拨号键", 24: "音量加键",
               25: "音量减键", 26: "电源键", 27: "照相机启动键", 87: "下一曲键",
               88: "上一曲键", 91: "静音键"}
 
  def input_keyevent(self, timeout):
    once_time = time.time() # 获取当前时间戳,并保存到一个变量
    # 循环获取当前时间,与once_time变量做时间戳做减法
    while time.time() - once_time <= timeout:
      # 随机选择字典的某个“键”
      keycode = random.choice(list(self.keycode_dict.keys()))
      command = "adb shell input keyevent %s" % keycode
      print("成功按下了%s" % self.keycode_dict[keycode])
      os.system(command)
      time.sleep(0.5) # 间隔0.5s,再进行下一次按键模拟
      print("已经进行了 %d 秒..., 一共需要测试 %d 秒" % (time.time() - once_time, timeout))
 
 
k_obj = KeyeventInputter()
k_obj.input_keyevent(7200)
os.system("pause")

运行方式与效果

确保Android设备通过USB线与电脑连接了,adb设备有效连接,以上代码的3种实现形式都可以直接运行,比如保存为random_keyevent.py并放在桌面,建议python random_keyevent.py运行,当然也可以双击运行。

运行效果如下:

Python 随机按键模拟2小时

以上就是Python 随机按键模拟2小时的详细内容,更多关于Python 随机按键模拟的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
Python实现的概率分布运算操作示例
Aug 14 Python
Python文件操作基本流程代码实例
Dec 11 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
python 剪切移动文件的实现代码
Aug 02 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 Python
Python实现进度条和时间预估的示例代码
Jun 02 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
Jul 01 Python
Python自动登录QQ的实现示例
Aug 28 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
Python的scikit-image模块实例讲解
Dec 30 #Python
用Python实现职工信息管理系统
Dec 30 #Python
python实现双人五子棋(终端版)
Dec 30 #Python
pandas 数据类型转换的实现
Dec 29 #Python
python中xlutils库用法浅析
Dec 29 #Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 #Python
python中uuid模块实例浅析
Dec 29 #Python
You might like
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
PHP 的几个配置文件函数
2006/12/21 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
python处理文本文件并生成指定格式的文件
2014/07/31 Python
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
python try 异常处理(史上最全)
2019/03/07 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
小学生环保演讲稿
2014/04/25 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
大二学年个人总结
2015/03/03 职场文书