当前位置: 首页 > 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.lryc.cn/news/624284.html

相关文章:

  • axure chrome 浏览器插件的使用
  • 大数据计算引擎(三)——Elasticsearch入门
  • 某储备土地前期开发项目控制保护区桥梁自动化监测
  • Git版本控制与协作
  • 数字时代著作权侵权:一场资本与法律的博弈
  • PYTHON让繁琐的工作自动化-函数
  • week2-[循环结构]找出正数
  • Vue3 中使用 Element Plus 完整指南
  • 从哲学(业务)视角看待数据挖掘:从认知到实践的螺旋上升
  • [数据结构] ArrayList 与 顺序表
  • 基于W55MH32Q-EVB 实现 HTTP 服务器配置 OLED 滚动显示信息
  • AI重塑商业格局:从多模态生成到智能应用的2025行业变革与机遇
  • 重温k8s基础概念知识系列四(服务、负载均衡和联网)
  • 视频讲解:CatBoost、梯度提升 (XGBoost、LightGBM)对心理健康数据、交通流量及股票价格预测研究
  • 【网络安全实验报告】实验七:简单的防火墙搭建实验
  • 数据结构(03)——线性表(顺序存储和链式存储)
  • HTTP协议-4-浏览器是怎么抉择HTTP版本的?
  • LeetCode 45.跳跃游戏II:贪心策略下的最少跳跃次数求解
  • 如何在windows下使用usbview查看USB设备信息
  • 局域网视频软件BeeWorks,内网顺畅沟通
  • CloudBase AI ToolKit + VSCode Copilot:打造高效智能云端开发新体验
  • 8.19 note
  • AI心理助手开发文档
  • 《Python学习之使用标准库:从入门到实战》
  • ST05跟踪MRP的运行(MD01)过程
  • Day8--滑动窗口与双指针--1004. 最大连续1的个数 III,1658. 将 x 减到 0 的最小操作数,3641. 最长半重复子数组
  • vite+react+antd,封装公共组件并发布npm包
  • 实践笔记-VSCode与IDE同步问题解决指南;程序总是进入中断服务程序。
  • RocksDB 解密可逆哈希:BijectiveHash的设计奥秘
  • Vue diff简介