录制和还原鼠标动作
record_mouse.py
# 导入pynput和json模块
from pynput import keyboard
from pynput import mouse
import json
import time
import os
is_running = True # 定义一个标志变量,用于控制录制的开始和结束
# 定义一个函数,用于录制鼠标操作,并保存到json文件中
def record_mouse(path):
# 创建一个空列表,用于存储操作记录
command_list = []
# 获取当前时间,用于计算操作的时间间隔
start_time = time.time()
# 定义一个回调函数,用于处理鼠标点击事件
def on_mouse_click(x, y, button, pressed):
# 如果录制已经结束,就退出监听
if not is_running:
return False
# 如果鼠标松开,就不记录
if not pressed:
return True
# 将鼠标的坐标,按下的按钮,和操作的时间间隔添加到列表中
command_list.append(
(
"click", # 操作模式
(x, y, str(button)), # 鼠标的坐标和按下的按钮
time.time() - start_time # 操作的时间间隔
)
)
# 定义一个回调函数,用于处理键盘按下事件 d
def on_key_press(key):
# 如果按下的是esc键,就结束录制
if key == keyboard.Key.esc:
global is_running
is_running = False
# 通过模拟点击鼠标来退出鼠标的监听,意思就是通过一次点击主动触发到点击事件,然后判定is_running = False就退出鼠标的监听了
mouse_controller = mouse.Controller()
mouse_controller.click(mouse.Button.left) # 这是修改的地方
return False
# 创建一个鼠标监听器,传入回调函数
mouse_listener = mouse.Listener(on_click=on_mouse_click)
# 创建一个键盘监听器,传入回调函数
key_listener = keyboard.Listener(on_press=on_key_press)
# 启动监听器
mouse_listener.start()
key_listener.start()
# 等待监听器结束
mouse_listener.join()
key_listener.join()
# 将操作记录保存到json文件中
with open(path, "w") as f:
f.write(json.dumps(command_list))
folder_name = "commands"
folder_path = os.path.join(os.getcwd(), folder_name)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
print("文件夹创建成功")
# 调用函数,录制鼠标操作,并保存到record.json文件中
record_mouse("commands/commands.json")
生成的record.json
文件在工作目录commands下面
replay_mouse.py
from pynput import mouse
import json
import time
def unicode_convert(input_data):
if 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]
else:
return input_data
# 定义一个函数,用于从json文件中读取并执行鼠标操作
def replay_mouse(path):
# 打开json文件,读取操作记录
with open(path) as f:
command_list = json.loads(f.read())
# 将操作记录转换成str类型
command_list = unicode_convert(command_list)
print("将操作记录转换成str类型成功")
print(command_list)
# 创建一个鼠标控制器,用于模拟鼠标操作
mouse_controller = mouse.Controller()
# 定义一个字典,用于映射鼠标的按钮
buttons = {
"Button.left": mouse.Button.left,
"Button.right": mouse.Button.right
}
# 定义一个变量,用于记录已经经过的时间
elapsed_time = 0
# 遍历操作记录,执行每一条操作
for command in command_list:
# 如果是鼠标点击操作
if command[0] == "click":
# 将鼠标移动到指定的坐标
mouse_controller.position = (command[1][0], command[1][1])
# 等待一下
time.sleep(0.1)
# 点击指定的按钮
mouse_controller.click(buttons[command[1][2]])
# 计算距离下一次操作的时间间隔
time.sleep(command[2] - elapsed_time)
# 更新已经经过的时间
elapsed_time = command[2]
# 调用函数,从record.json文件中读取并执行鼠标操作
replay_mouse("commands/commands.json")
本文作者:chenyuanhang
本文链接:https://www.cnblogs.com/agonysec/p/18045202/recording-and-restoring-mouse-action-2oguiv
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步