我讨厌温柔的人.|

AgonySec

园龄:1年10个月粉丝:8关注:2

录制和还原鼠标动作

  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 中国大陆许可协议进行许可。

posted @   AgonySec  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起