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 14 Python
使用Python中的tkinter模块作图的方法
Feb 07 Python
简单易懂的python环境安装教程
Jul 13 Python
python Pygame的具体使用讲解
Nov 03 Python
Python文本处理之按行处理大文件的方法
Apr 09 Python
在python里从协程返回一个值的示例
Feb 19 Python
python实现画出e指数函数的图像
Nov 21 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
python中如何设置代码自动提示
Jul 15 Python
Python 实现集合Set的示例
Dec 21 Python
python通过opencv调用摄像头操作实例分析
Jun 07 Python
python 学习GCN图卷积神经网络
May 11 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
PHP动态创建Web站点的方法
2011/08/14 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
webpack4.0 入门实践教程
2018/10/08 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
python3正则模块re的使用方法详解
2020/02/11 Python
Python基于pandas绘制散点图矩阵代码实例
2020/06/04 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
房地产销售大学生自我评价分享
2013/11/11 职场文书
触摸春天教学反思
2014/02/03 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
元旦晚会活动总结
2014/07/09 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
高三数学教学反思
2016/02/18 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang