Merekam dan Memutar Ulang Aktivitas Keyboard & Mouse dengan Python

Bayangkan kamu bisa merekam semua gerakan mouse dan keyboard, lalu memutarnya kembali secara otomatis seperti robot asisten pribadi. Dengan Python dan beberapa library tambahan, hal ini bukan hanya mungkin — tapi bisa kamu lakukan sekarang juga.

Berikut ini adalah contoh script Python yang berfungsi sebagai perekam aktivitas keyboard dan mouse, serta bisa memutarnya kembali sesuai urutan waktu saat direkam.

Contoh 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.")

Apa Gunanya Script Ini?

Script ini memungkinkan kamu untuk:

  • Merekam aktivitas kamu di komputer, termasuk klik, gerakan mouse, dan penekanan tombol keyboard.
  • Menyimpan aktivitas tersebut ke dalam file actions.json.
  • Memutar ulang semua aktivitas itu secara otomatis dengan perintah replay.

Cocok digunakan untuk:

  • Automasi tugas berulang,
  • Demonstrasi penggunaan software,
  • Testing UI secara manual,
  • Atau sekadar eksperimen dengan automasi.

Bagaimana Cara Kerjanya?

Script ini terdiri dari dua fungsi utama:

1. record(): Merekam Aktivitas

  • Menggunakan keyboard.hook() untuk mencatat setiap tombol yang ditekan dan dilepas, dengan pencegahan duplikasi agar tidak mencatat tombol yang ditekan terus-menerus.
  • Menggunakan pynput.mouse.Listener untuk mencatat pergerakan dan klik mouse.
  • Semua aktivitas disimpan sebagai data (timestamp, jenis_event, detail_event).
  • Tekan Ctrl + Alt + Shift + S untuk menghentikan proses perekaman.
  • Hasil rekaman disimpan dalam format JSON dengan timestamp relatif (agar bisa diatur kecepatan pemutaran ulangnya).

2. replay(): Memutar Ulang Aktivitas

  • Membaca file actions.json.
  • Memainkan kembali semua event dengan pyautogui, seperti:
    • Memindahkan kursor,
    • Melakukan klik,
    • Menekan tombol keyboard.
  • Durasi antar tindakan dipercepat dengan speed_multiplier (misalnya 50x lebih cepat dari aslinya).

Cara Menggunakan

  1. Buka terminal atau command prompt, lalu jalankan file script ini.
  2. Saat muncul prompt:
    • Ketik 's' untuk mulai merekam,
    • Ketik 'doit' untuk memutar ulang rekaman,
    • Ketik 'exit' untuk keluar.
  3. Selama proses rekam berlangsung, lakukan aktivitas seperti biasa.
  4. Tekan Ctrl + Alt + Shift + S untuk berhenti merekam.
  5. Jalankan replay untuk melihat ulang semua aktivitasmu dijalankan secara otomatis.

Kesimpulan

Script ini adalah contoh nyata bahwa Python sangat fleksibel dan kuat untuk membuat program automasi yang nyata berguna. Dengan sedikit kreativitas, kamu bisa mengembangkannya menjadi:

  • Macro recorder pribadi,
  • Tool testing aplikasi,
  • Atau bahkan bagian dari software RPA (Robotic Process Automation) sederhana.

Selamat mencoba… dan selamat ber-eksperimen dengan automasi Python! 🐍✨

Tinggalkan komentar