图形自动化:pynput实现Win11系统动作点击录制与回放
下面给出「录制 → 回放」一体脚本,完全基于 pynput,零依赖(除 pynput)。
结构
mouse_replay/
├── mouse_recorder.py # 录制并保存 JSON
├── mouse_replay.py # 读取 JSON 并精准回放
└── main_demo.py # 一键「先录后播」示例
- 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()
- 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()
- 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()
使用流程
-
安装依赖
pip install pynput
-
录制
python main_demo.py
→ 鼠标左键点击若干次后 Ctrl+C 结束,生成 clicks.json
-
回放
python main_demo.py --replay
→ 3 秒倒计时后,鼠标将自动移动到之前记录的坐标并依次点击。
如需扩展(键盘、拖拽、动态延迟),只需在 JSON 中增加字段并在 MouseReplay
解析即可。