这里写自定义目录标题

  • 1.录制鼠标过程源代码,按esc键结束录制,最后保存在commands.json文件中
  • 2.执行上面代码得到的commands.json文件,运行程序,输入文件绝对路径或者文件名,输入文件名则搜索当前程序下的目录文件

1.录制鼠标过程源代码,按esc键结束录制,最后保存在commands.json文件中

# -*- coding:utf-8 -*-
#一个记录用户操作,并保存到json文件的程序import time    #用于记录每一项操作的时间
import json    #用于保存导出我们记录的操作
import threading    #由于键盘和鼠标事件的监听都是阻塞的,所以用两个线程实现
import pynput    #用于记录用户事件
command_list=[]    #用来存储用户的操作
isRunning=True    #是否在运行,用于实现在按esc后退出的功能
startTime=0    #开始时间,会在之后main函数中进行初始化
def on_key_press(key):    #当按键按下时记录if key==pynput.keyboard.Key.esc:    #如果是escglobal isRunningisRunning=False    #通知监听鼠标的线程mouse=pynput.mouse.Controller()    #获取鼠标的控制器mouse.click(pynput.mouse.Button.left)    #通过模拟点击鼠标以执行鼠标的线程,然后退出监听.return False    #监听函数return False表示退出监听12command_list.append(("press",    #操作模式(str(key).strip("'"),),    #具体按下的键,传进来的参数并不是一个字符串,而是一个对象,如果按下的是普通的键,会记录下键对应的字符,否则会使一个"Key.xx"的字符串time.time()-startTime    #操作距离程序开始运行的秒数))
def on_key_release(key):    #但按键松开时记录command_list.append(("release",    #操作模式(str(key).strip("'"),),    #键信息,参见on_key_press中的相同部分time.time()-startTime    #操作距离程序开始运行的秒数))
def on_mouse_click(x,y,button,pressed):if not isRunning:    #如果已经不在运行了return False    #退出监听if not pressed:    #如果是松开事件return True    #不记录command_list.append(("click",    #操作模式(x,y,str(button)),    #分别是鼠标的坐标和按下的按键time.time()-startTime    #操作距离程序开始运行的秒数))
def start_key_listen():    #用于开始按键的监听# 进行监听with pynput.keyboard.Listener(on_press=on_key_press,on_release=on_key_release) as listener:listener.join()def start_mouse_listen():    #用于开始鼠标的监听# 进行监听with pynput.mouse.Listener(on_click=on_mouse_click) as listener:listener.join()def toFile(command_list,path):    #保存为文件,参数分别为操作记录和保存位置with open(path,"w") as f:f.write(json.dumps(command_list))    #使用json格式写入def main():    #主函数global startTimestartTime=time.time()    #初始化开始时间key_listen_thread=threading.Thread(target=start_key_listen)    #创建用于监听按键的线程mouse_listen_thread=threading.Thread(target=start_mouse_listen)    #创建用于监听鼠标的线程#运行线程key_listen_thread.start()mouse_listen_thread.start()#等待线程结束,也就是等待用户按下esckey_listen_thread.join()mouse_listen_thread.join()#保存文件toFile(command_list,"./commands.json")if __name__=="__main__":main()

2.执行上面代码得到的commands.json文件,运行程序,输入文件绝对路径或者文件名,输入文件名则搜索当前程序下的目录文件

# -*- coding:utf-8 -*-
# 一个运行使用"记录宏.py"记录的json的程序
import os  # 用于文件操作
import json  # 用于记录下来的操作
import time  # 用于按照记录下来的时间间隔操作
import pynput  # 用于模拟鼠标键盘操作def unicode_convert(input_data):#将unicode转换成strif isinstance(input_data, dict):return {unicode_convert(key): unicode_convert(value) for key, value in input_data.iteritems()}elif isinstance(input_data, list):return [unicode_convert(element) for element in input_data]elif isinstance(input_data, unicode):return input_data.encode('utf-8')else:return input_datadef ExecuteCommandsFile(path):# 如果命令行传入了参数,则使用命令行参数,否则提示用户输入,此变量表示操作记录文件的路径# 第二个不是:,也就代表路径是相对路径path = unicode_convert(path)if path[2] != ":":# 将其解析为从本文件开始的路径path = os.path.join(os.path.dirname(__file__), path)# 打开文件with open(path) as f:# 将记录的命令写入命令列表command_list = json.loads(f.read())command_list = unicode_convert(command_list)# 创建鼠标和键盘的执行器,用于模拟键盘和鼠标的操作mouse = pynput.mouse.Controller()keyboard = pynput.keyboard.Controller()# 鼠标的两个按钮buttons = {"Button.left": pynput.mouse.Button.left,"Button.right": pynput.mouse.Button.right}# 开始后已经经过的时间sTime = 0# 执行每一条记录for command in command_list:# 如果是点击记录print(command[0])print(command[1])#print(command[1][2])print(command[2])if command[0] == "click":# 将鼠标移动到记录中的位置mouse.position = (command[1][0], command[1][1])# 等待一下time.sleep(0.1)# 点击mouse.click(buttons[command[1][2]])# 如果是按键按下elif command[0] == "press":# 如果是特殊按键,会记录成Key.xxx,这里判断是不是特殊按键if command[1][0][:3] == "Key":# 按下按键keyboard.press(eval(command[1][0], {}, {"Key": pynput.keyboard.Key}))else:# 如果是普通按键,直接按下if "<255>" == command[1][0]:continueprint(command[1][0])print(command[1][0].split("'")[1])keyboard.press(command[1][0].split("'")[1])# 如果是按键释放elif command[0] == "release":# 如果是特殊按键if command[1][0][:3] == "Key":# 按下按键keyboard.release(eval(command[1][0], {}, {"Key": pynput.keyboard.Key}))else:# 普通按键直接按下if "<255>" == command[1][0]:continueprint(command[1][0])print(command[1][0].split("'")[1])keyboard.release(command[1][0].split("'")[1])# command[2]代表此操作距离开始操作所经过的时间,用它减去已经经过的时间就是距离下一次操作的时间time.sleep(command[2] - sTime)# 更新时间sTime = command[2]if __name__=="__main__":path = 'commands.json'ExecuteCommandsFile(path)

python3实现鼠标键盘动作录制,并还原执行过程相关推荐

  1. Tools_@截屏工具@OCR识别工具@图片文字翻译工具长截屏,普通截屏套件推荐(by QQ)@鼠标键盘动作录制

    文章目录 Tools_@截屏工具@OCR识别工具@图片文字翻译工具长截屏,普通截屏套件推荐(QQ自带) 全局录屏/长截屏: OCR 优点 不足 quicker动作 鼠键录制工具

  2. 屏幕鼠标键盘重复录制执行工具比拼:

    http://bbs.crsky.com/job.php?action=download&pid=tpc&tid=2877091&aid=2671316 不好用 运行死掉~~~ ...

  3. python模拟鼠标键盘操作_python3实现复制粘贴 Python-模拟鼠标键盘动作 | 猴头客

    1. 安装pyperclip pip install pyperclip 使用方法 复制 pyperclip.copy("hello world") 粘贴 pyperclip.pa ...

  4. 按键精灵2014(替代重复的鼠标键盘动作)

    可以模拟重复的鼠标键盘动作等,刷消息.登录服务器需每次输入固定的东西等. 按键精灵2014下载及指令api 下载以后也会有一些指令 securefx的登录替代 //按键精灵脚本命令 UserVar M ...

  5. JS监听页面----无鼠标键盘动作,自动跳页

    监听页面鼠标键盘动作,若用户5秒没有任何操作,页面自动跳转 function ScreenSaver(settings){ this.settings = settings; this.nTimeou ...

  6. python录制鼠标动作_python之模拟鼠标键盘动作具体实现

    导读热词 上个月就打算开发个还算好玩的项目,但是一直没时间.这篇是此项目用到的一部分, 处理好此部分基本还差通信等方面的了.首先模拟鼠标键盘按下释放的动作,本人利用X11 这个库,所以要了解X11编程 ...

  7. python 模拟鼠标键盘_python之模拟鼠标键盘动作

    上个月就打算开发个还算好玩的项目,但是一直没时间.这篇是此项目用到的一部分, 处理好此部分基本还差通信等方面的了.首先模拟鼠标键盘按下释放的动作,本人利用X11 这个库,所以要了解X11编程;其次,本 ...

  8. java实现自动识别验证码并自动填写提交(调用百度通用文字识别OCR接口+大图找小图之图像识别算法+模拟鼠标键盘动作)

    一.使用的技术: 1.调用百度AI通用文字识别OCR接口 2.图像识别算法 二.实现方案与步骤: 1.得到验证码的图片的坐标:先将验证码截图,然后再对整个电脑屏幕截图,通过大图找小图的方法,计算出小图 ...

  9. python模拟鼠标键盘原理_Python-模拟鼠标键盘动作

    引 在使用电脑的时候,偶尔有需求要模拟鼠标键盘,进行一些机械重复的操作(刷新网页.抢票.某些小游戏等).如果为此专门下载一个按键精灵,总感觉杀鸡用牛刀,所以就开始探索一些轻量级解决方案.本人电脑上配置 ...

最新文章

  1. Install NSCA
  2. Android 解析包出错问题
  3. Java多线程协作(wait、notify、 notifyAll)
  4. python ocr中文识别库 tesseract安装及问题处理
  5. [分享]多个选项卡切换效果
  6. 线性八叉树_基于三维点云数据的线性八叉树编码压缩算法(权毓舒, 何明一,).pdf...
  7. Flume 中文入门手冊
  8. 不怕烧钱怕翻车:雷军与马化腾现场“过招”
  9. centos mysql jar 驱动包_JDBC连接MySQL的数据库
  10. Servlet HTTP 状态码
  11. 距离一个优秀程序员,你还差多少?
  12. R语言可视化学习笔记之ggpubr包
  13. 笔记_深度学习相关_PyTorch
  14. 【菜鸟学Java】1:Java语言简介
  15. esp分区引导修复失败_让你彻底理解和学会UEFI启动模式下修复引导问题的教程-网络教程与技术 -亦是美网络...
  16. android获取摄像头视频分辨率,相机自定义拍照录像,可设置分辨率、焦距、无声录像、支持横竖屏...
  17. CSS——网易云音乐之下载客户端页面的实现
  18. Django之验证码(十七)
  19. 萌新小白学3D建模需要什么软件,十年经验建模师为你解答,速看
  20. 前端实现图片快速反转替换_canvas实现图片镜像翻转的2种方式

热门文章

  1. 输出一个*号的平行四边形
  2. Go语言 IDE之Gogland配置使用
  3. js节点操作自定义属性
  4. 【一起学UniGUI】--UniGUI的界面与程序架构(4)
  5. 苹果在中国的降价策略收到效果 销量回升了
  6. 进制转换(用Python实现进制转换器)
  7. 机器码 与 汇编指令的关系
  8. origin绘图技巧
  9. 教你如何设置u盘启动安装系统
  10. DEJA_VU3D - Cesium功能集 之 052-模拟卫星轨道(高空)效果