Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 PyAutoGUI로 마우스·키보드 자동화하기: 핵심 함수와 실전 예제

이번 글에서는 파이썬의 강력한 GUI 자동화 라이브러리인 PyAutoGUI를 활용해 마우스 움직임과 키보드 입력을 자동화하는 방법을 알아봅니다.

PyAutoGUI는 마우스 커서를 이동·클릭하고 키보드를 입력하는 작업을 코드로 제어할 수 있게 해주는 라이브러리입니다. 사람이 직접 조작하는 것처럼 화면의 GUI를 다룰 수 있어 반복 작업 자동화, 매크로 제작, UI 테스트 등에 널리 활용되며, Windows·macOS·Linux를 모두 지원하는 크로스 플랫폼 모듈이라는 점도 큰 장점입니다.

PyAutoGUI는 파이썬 기본 패키지에 포함되지 않은 외부(서드파티) 라이브러리이므로 먼저 설치해야 합니다. 터미널(명령 프롬프트)에서 아래 명령을 실행하세요.

pip install pyautogui

1. 마우스 제어하기

마우스 관련 주요 함수를 먼저 정리하면 다음과 같습니다.

  • size(): 현재 모니터의 해상도(너비 × 높이)를 반환합니다.
  • position(): 마우스 커서의 현재 좌표(x, y)를 반환합니다.
  • moveTo(x, y): 지정한 절대 좌표로 커서를 이동시킵니다.
  • move(x, y) / moveRel(x, y): 현재 위치를 기준으로 상대 좌표만큼 이동합니다.
  • duration 인자: 이동에 걸리는 시간을 초 단위로 지정하며, 값을 주면 그 시간 동안 부드럽게 움직입니다.
  • click(x, y): 해당 좌표에서 클릭합니다. 인자를 생략하면 현재 위치에서 클릭합니다.

아래는 CLI에서 실행해 본 실제 예제입니다. 프로그램을 돌려 보면 명령 하나하나마다 마우스가 실제로 움직이는 것을 눈으로 확인할 수 있습니다. 다양한 값으로 바꿔 가며 직접 실험해 보세요.

>>> import pyautogui
>>> pyautogui.size()
Size(width=1366, height=768)
>>> width, height = pyautogui.size()
>>> width
1366
>>> height
768
>>> pyautogui.position()
Point(x=750, y=293)
>>> pyautogui.moveTo(10, 10)
>>> pyautogui.move(10, 10, duration=1.5)
>>> pyautogui.moveRel(250, 0, duration=2.5)
>>> pyautogui.moveRel(0, -150, duration=1.5)
>>> pyautogui.position()
Point(x=210, y=526)
>>> pyautogui.click(339, 38)
>>> pyautogui.click()

duration 값을 설정하면 마우스가 그 시간만큼 천천히 이동하는 것을 볼 수 있습니다. 실행 도중 제어권을 잃었을 때를 대비해, 마우스를 화면 왼쪽 위 구석으로 빠르게 옮기면 FailSafeException이 발생해 프로그램이 안전하게 중단되는 FAILSAFE 기능이 내장되어 있으며, 콘솔에서 Ctrl+C로 실행을 끊을 수도 있습니다.

2. 키보드 제어 함수

typewrite() 함수

키보드 자동화의 핵심 함수는 typewrite()(최신 버전에서는 write() 권장)입니다. 전달한 문자열의 문자를 하나씩 순서대로 입력하며, 각 문자 입력 사이에 딜레이를 두고 싶으면 interval 키워드 인자에 int 또는 float 값(초)을 넘기면 됩니다.

>>> pyautogui.typewrite('Hello, TutorialsPoint!')  # 즉시 입력됨
Hello, TutorialsPoint!
>>> pyautogui.typewrite('Hello, TutorialsPoint!', interval=0.25)  # 한 글자마다 0.25초 딜레이
Hello, TutorialsPoint!

press(), keyDown(), keyUp() 함수

Enter, Esc, F1 같은 특수 키를 누르려면 press() 함수를 호출하고 pyautogui.KEYBOARD_KEYS에 포함된 키 이름 문자열을 넘깁니다.

>>> pyautogui.press('enter')   # Enter 키
>>> pyautogui.press('f1')      # F1 키
>>> pyautogui.press('left')    # ← 방향키

typewrite()처럼 여러 키를 연속해서 누르려면 문자열 리스트를 전달하면 됩니다.

>>> pyautogui.press(['left', 'left', 'left'])

키를 누른 상태로 유지하거나 떼는 동작이 필요하면 keyDown()keyUp()을 사용합니다.

hotkey() 함수

Ctrl+Shift+Esc처럼 여러 키를 조합한 단축키(핫키)를 편리하게 입력하려면 hotkey()를 사용합니다. 전달된 키들이 순서대로 눌린 뒤 역순으로 떼어집니다.

>>> pyautogui.hotkey('ctrl', 'shift', 'esc')

Windows에서 위 코드를 실행하면 작업 관리자(Task Manager) 창이 열리며, 이는 아래 코드와 완전히 동일한 동작입니다.

>>> pyautogui.keyDown('ctrl')
>>> pyautogui.keyDown('shift')
>>> pyautogui.keyDown('esc')
>>> pyautogui.keyUp('esc')
>>> pyautogui.keyUp('shift')
>>> pyautogui.keyUp('ctrl')

3. 종합 예제

마우스 클릭으로 입력 창에 포커스를 준 뒤 키보드 입력을 수행하는, 지금까지 배운 기능을 종합한 예제입니다.

>>> import pyautogui
>>> pyautogui.click(90, 90); pyautogui.typewrite('Hello, World!')
>>> pyautogui.click(150, 150); pyautogui.typewrite('Hello, World!', interval=0.2)

# 문자와 특수 키를 섞어 입력하기
>>> pyautogui.typewrite(['a', 'b', 'left', 'left', 'X', 'Y'])
# 결과: XYab  ('ab' 입력 후 커서를 두 칸 왼쪽으로 옮겨 XY가 앞에 삽입됨)

>>> pyautogui.press('f1')

입력 가능한 모든 키 이름은 pyautogui.KEYBOARD_KEYS로 확인할 수 있습니다. 영문자·숫자·기호는 물론 방향키(up, down, left, right), 수정 키(ctrl, alt, shift), F1~F24, enter, esc, tab, volumedown 등 매우 다양한 키가 정의되어 있습니다.

마치며

PyAutoGUI를 사용하면 몇 줄의 코드만으로 마우스 클릭, 커서 이동, 키보드 입력을 자유롭게 자동화할 수 있습니다. 반복적인 데스크톱 업무나 테스트 자동화 등에 응용해 보되, 스크립트가 의도치 않게 동작할 수 있으므로 FAILSAFE 기능을 숙지하고 충분히 테스트한 뒤 사용하는 것이 좋습니다.