Imagine being able to record every mouse move and keypress you make, then replay them automatically—like having a personal assistant bot. With Python and a few handy libraries, this isn’t just possible… it’s actually pretty easy!
Here’s a real-world script example that allows you to record your mouse and keyboard activity, save it, and replay it later just like a macro recorder.
Example Script:
import pyautogui
import keyboard
import time
import json
from pynput import mouse
from threading import Thread
actions = []
recording = False
pressed_keys = set() # ✅ Tambahan untuk mencegah duplikasi key
def record_action(event_type, details):
timestamp = time.time()
actions.append((timestamp, event_type, details))
def record():
global recording, actions, pressed_keys
actions = []
pressed_keys = set() # ✅ Reset state
recording = True
print("📼 Recording started. Press Ctrl+Shift+S to stop.")
start_time = time.time()
# ✅ Hook keyboard dengan pencegahan duplikasi
def on_key_event(e):
if not recording:
return
if e.event_type == 'down' and e.name not in pressed_keys:
pressed_keys.add(e.name)
record_action('key', e.name)
elif e.event_type == 'up' and e.name in pressed_keys:
pressed_keys.remove(e.name)
keyboard.hook(on_key_event)
# Hook mouse events
def on_click(x, y, button, pressed):
if recording:
if pressed:
record_action('mousedown', (x, y, str(button)))
else:
record_action('mouseup', (x, y, str(button)))
def on_move(x, y):
if recording:
record_action('move', (x, y))
mouse_listener = mouse.Listener(on_click=on_click, on_move=on_move)
mouse_listener.start()
# Stop logic
while recording:
if keyboard.is_pressed('ctrl+alt+shift+s'):
recording = False
print("🛑 Recording stopped.")
break
time.sleep(0.01)
mouse_listener.stop()
# Save actions with relative timestamp
base_time = actions[0][0] if actions else time.time()
relative_actions = [(round(t - base_time, 4), tpe, data) for t, tpe, data in actions]
with open("actions.json", "w") as f:
json.dump(relative_actions, f)
print(f"💾 Saved {len(relative_actions)} actions to actions.json")
def replay():
speed_multiplier = 50.0 # 🔥 bisa diubah misalnya 10.0 untuk turbo
try:
with open("actions.json", "r") as f:
recorded = json.load(f)
except:
print("❌ actions.json not found.")
return
print(f"▶ Replaying actions {speed_multiplier}x faster...")
for i, (delay, event_type, details) in enumerate(recorded):
if i > 0:
prev_delay = recorded[i - 1][0]
delay_diff = (delay - prev_delay) / speed_multiplier
time.sleep(max(0, delay_diff))
if event_type == "move":
x, y = details
pyautogui.moveTo(x, y)
elif event_type == "mousedown":
x, y, button = details
pyautogui.mouseDown(x, y, button=button.replace("Button.", ""))
elif event_type == "mouseup":
x, y, button = details
pyautogui.mouseUp(x, y, button=button.replace("Button.", ""))
elif event_type == "key":
pyautogui.press(details)
print("✅ Done replay!")
if __name__ == "__main__":
print("=== KESO RECORDER ===")
while True:
cmd = input("Type 's' to start recording, 'doit' to replay, or 'exit': ").strip().lower()
if cmd == 's':
record()
elif cmd == 'doit':
replay()
elif cmd == 'exit':
break
else:
print("❓ Unknown command.")
What Is This Script For?
This Python script lets you:
- Record your interactions with your computer, including clicks, mouse movements, and keyboard inputs.
- Save those interactions to a file called
actions.json. - Replay those actions automatically, mimicking your behavior in real-time (or faster!).
It’s great for:
- Automating repetitive tasks,
- Creating software usage demos,
- UI testing,
- Or just playing around with automation.
How Does It Work?
The script has two main features:
1. record(): Recording Your Activity
- Uses
keyboard.hook()to track key presses and releases, with duplicate prevention so it doesn’t keep logging a key being held down. - Uses
pynput.mouse.Listenerto track mouse movements and clicks. - Every event is stored as
(timestamp, event_type, event_detail). - Press
Ctrl + Alt + Shift + Sto stop recording. - Events are saved in a JSON file with relative timestamps, making it easy to speed up or slow down the replay.
2. replay(): Playing It Back
- Reads from the
actions.jsonfile. - Uses
pyautoguito simulate the same actions, such as:- Moving the mouse,
- Clicking,
- Pressing keys.
- Playback speed is controlled with
speed_multiplier, e.g.,50.0makes it 50x faster than real time.
How to Use It
- Run the script in your terminal or command prompt.
- At the prompt:
- Type
's'to start recording, - Type
'doit'to replay, - Type
'exit'to quit.
- Type
- While recording, interact with your apps as usual.
- Press
Ctrl + Alt + Shift + Sto stop recording. - Use the replay command to watch your actions play back automatically.
Summary
This script is a great example of how Python can be used to build real, practical automation tools. With a bit of creativity, you can turn this into:
- A personal macro recorder,
- A UI testing helper,
- Or even a basic RPA (Robotic Process Automation) system.
Give it a shot, tweak it, and explore the world of Python automation! 🐍⚙️