当前位置: 首页 > article >正文

python录制鼠标键盘操作循环播放

依赖

pip install pynput

程序:

from pynput import mouse, keyboard
import time
import threading

# 用于存储录制的鼠标和键盘事件
mouse_events = []
keyboard_events = []

# 定义事件处理函数

# 处理鼠标事件
def on_move(x, y):
    mouse_events.append(('move', x, y))

def on_click(x, y, button, pressed):
    mouse_events.append(('click', x, y, button, pressed))

def on_scroll(x, y, dx, dy):
    mouse_events.append(('scroll', x, y, dx, dy))

# 处理键盘事件
def on_press(key):
    try:
        keyboard_events.append(('press', key.char))
    except AttributeError:
        keyboard_events.append(('press', str(key)))

def on_release(key):
    try:
        keyboard_events.append(('release', key.char))
    except AttributeError:
        keyboard_events.append(('release', str(key)))

    # 按下 Esc 键时停止监听
    if key == keyboard.Key.esc:
        return False

# 启动监听线程
def start_listening():
    # 启动鼠标和键盘的监听器
    mouse_listener = mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll)
    keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)

    mouse_listener.start()
    keyboard_listener.start()

    # 等待监听器结束
    mouse_listener.join()
    keyboard_listener.join()

# 执行录制的操作
def replay_events():
    print("Replaying events...")
    for event in mouse_events:
        if event[0] == 'move':
            print(f"Moving mouse to {event[1]}, {event[2]}")
            # 在这里可以使用 `pyautogui.moveTo(x, y)` 等模拟鼠标移动
        elif event[0] == 'click':
            print(f"Clicking at {event[1]}, {event[2]} with button {event[3]} - {event[4]}")
            # 在这里可以使用 `pyautogui.click(x, y)` 等模拟鼠标点击
        elif event[0] == 'scroll':
            print(f"Scrolling at {event[1]}, {event[2]} with dx={event[3]} dy={event[4]}")
            # 在这里可以使用 `pyautogui.scroll(dx, dy)` 等模拟鼠标滚动

    for event in keyboard_events:
        if event[0] == 'press':
            print(f"Pressing key {event[1]}")
            # 在这里可以使用 `pyautogui.write()` 等模拟键盘按键
        elif event[0] == 'release':
            print(f"Releasing key {event[1]}")
            # 在这里可以模拟按键松开

    print("Replay finished.")

# 主程序
def main():
    print("Recording started, press 'Esc' key to stop recording.")
    
    # 启动监听线程
    listener_thread = threading.Thread(target=start_listening)
    listener_thread.start()

    # 等待用户按下 'Esc' 键结束录制
    listener_thread.join()

    # 录制结束后执行录制的操作
    replay_events()

    # 循环执行
    while True:
        print("Replaying recorded events...")
        replay_events()
        time.sleep(2)  # 延时 2 秒后重新执行

if __name__ == "__main__":
    main()
import pyautogui

# 在回放中使用 pyautogui
pyautogui.moveTo(x, y)  # 模拟鼠标移动
pyautogui.click(x, y)  # 模拟鼠标点击
pyautogui.write('Hello')  # 模拟键盘输入


http://www.kler.cn/a/428206.html

相关文章:

  • 展示统计信息收集情况
  • 剑指 Offer II 008. 和大于等于 target 的最短子数组
  • 数字化转型-工具变量(2024.1更新)-社科数据
  • mysql DDL可重入讨论
  • 如何在Spring Boot项目中高效集成Spring Security
  • Baklib打造高效内容管理平台提升协作与创作体验
  • LeetCode:28. 找出字符串中第一个匹配项的下标(KMP算法)
  • 【PlantUML系列】思维导图(五)
  • Flink自定义数据源
  • Netty 的多线程模型详解
  • LabVIEW中“this VI‘s owning library is missing”错误及解决
  • openharmony开发资料合集
  • UI Left EXE Right Recive TCPIP
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-build.py
  • 【如何制定虚拟货币的补仓策略并计算回本和盈利】
  • Linux网络编程之---组播和广播
  • 快速排序的基本思想和java实现
  • Next.js系统性教学:全面掌握客服务端组件(Server Components)
  • ARMv8-A MacOS调试环境搭建
  • Python毕业设计选题:基于大数据的淘宝电子产品数据分析的设计与实现-django+spark+spider
  • PyCharm文件、临时文件、目录、文件夹(Directory)、软件包(Package)的区别
  • Spring Boot配置文件敏感信息加密
  • 智创 AI 新视界 -- AI 与量子计算的未来融合前景(16 - 5)
  • python拆分Excel文件
  • docker安装ddns-go(外网连接局域网)
  • JVM 参数配置详细介绍