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

图形自动化:pynput实现Win11系统动作点击录制与回放

下面给出「录制 → 回放」一体脚本,完全基于 pynput,零依赖(除 pynput)。

结构

mouse_replay/

├── mouse_recorder.py # 录制并保存 JSON

├── mouse_replay.py # 读取 JSON 并精准回放

└── main_demo.py # 一键「先录后播」示例


  1. mouse_recorder.py
"""
录制鼠标左键点击序列,保存为 JSON
"""
import json
import time
from pathlib import Path
from pynput import mouseDEFAULT_FILE = Path("clicks.json")class MouseRecorder:def __init__(self, save_path: Path = DEFAULT_FILE):self.save_path = save_pathself.clicks = []def _on_click(self, x, y, button, pressed):if button == mouse.Button.left and pressed:self.clicks.append({"x": x, "y": y, "delay": 0})def run(self):print("开始录制,按 Ctrl+C 结束...")with mouse.Listener(on_click=self._on_click) as lst:try:lst.join()except KeyboardInterrupt:print("\n录制结束,保存中...")# 计算每一步的相对延时(秒)for i in range(1, len(self.clicks)):self.clicks[i]["delay"] = 0.5  # 固定间隔,可改成动态self.save_path.write_text(json.dumps(self.clicks, indent=2))print(f"已保存 {len(self.clicks)} 次点击 → {self.save_path}")if __name__ == "__main__":MouseRecorder().run()

  1. mouse_replay.py
"""
读取 clicks.json,精准回放鼠标点击
"""
import json
import time
from pathlib import Path
from pynput.mouse import Button, ControllerDEFAULT_FILE = Path("clicks.json")class MouseReplay:def __init__(self, load_path: Path = DEFAULT_FILE):if not load_path.exists():raise FileNotFoundError(load_path)self.clicks = json.loads(load_path.read_text())self.mouse = Controller()def run(self):print(f"准备回放 {len(self.clicks)} 次点击,3 秒后开始...")time.sleep(3)for idx, step in enumerate(self.clicks, 1):x, y, delay = step["x"], step["y"], step["delay"]print(f"[{idx}] 移动到 ({x}, {y}) 并点击,延时 {delay}s")self.mouse.position = (x, y)time.sleep(0.1)  # 稳定self.mouse.click(Button.left, 1)time.sleep(delay)print("回放完成!")if __name__ == "__main__":MouseReplay().run()

  1. main_demo.py (一键「录→播」)
"""
python main_demo.py           # 先录
python main_demo.py --replay  # 后播
"""
import argparse
from mouse_recorder import MouseRecorder
from mouse_replay import MouseReplayparser = argparse.ArgumentParser()
parser.add_argument("--replay", action="store_true", help="直接回放")
args = parser.parse_args()if args.replay:MouseReplay().run()
else:MouseRecorder().run()

使用流程

  1. 安装依赖

    pip install pynput

  2. 录制

    python main_demo.py

    → 鼠标左键点击若干次后 Ctrl+C 结束,生成 clicks.json

  3. 回放

    python main_demo.py --replay

    → 3 秒倒计时后,鼠标将自动移动到之前记录的坐标并依次点击。

如需扩展(键盘、拖拽、动态延迟),只需在 JSON 中增加字段并在 MouseReplay 解析即可。

http://www.dtcms.com/a/337293.html

相关文章:

  • 【HarmonyOS】应用设置全屏和安全区域详解
  • 广州曼顿智能断路器:让用电更聪明,生活更安心!
  • Java面试宝典:Redis高级特性和应用(发布 订阅、Stream)
  • Redis面试精讲 Day 25:Redis实现分布式Session与购物车
  • Redis---持久化策略
  • SSM-组件的批量扫描
  • 时、分、秒、倒计时组件
  • Redis 客户端安装方法
  • Spring Boot + Spring Kafka 集成
  • 深层语义知识图谱:提升NLP文本预处理效果的关键技术
  • 《基于改进 MobileNetV2 的轻量化茶叶病虫害检测方法》论文解析
  • Redis--day8--黑马点评--分布式锁(一)
  • HTML应用指南:利用POST请求获取全国华为旗舰店门店位置信息
  • Python函数:装饰器
  • c++最长上升子序列长度
  • 雷卯针对香橙派Orange Pi 5 Plus开发板防雷防静电方案
  • JavaWeb 请求与响应乱码问题全面解决方案
  • React diff——差异协调算法简介
  • 算法-决策树
  • 从决策树基础到熵与信息增益
  • 网络间的通用语言TCP/IP-网络中的通用规则1
  • 本地文件上传到gitee仓库的详细步骤
  • sem_post函数的定义及作用
  • 【81页PPT】国内某知名大型制药企业制药数字化转型项目汇报方案(附下载方式)
  • 无人设备遥控器之操控信号精度篇
  • 【68页PPT】MES系统数字化工厂解决方案(附下载方式)
  • 深入剖析以太坊虚拟机(EVM):区块链世界的计算引擎
  • go 多版本共存【goup + alias方案】
  • React diff Vue diff介绍
  • 【2025CVPR-目标检测方向】RaCFormer:通过基于查询的雷达-相机融合实现高质量的 3D 目标检测