[파이썬] Python 키보드, 마우스 제어(컨트롤)하는 방법(PyAutoGUI )
오늘은 파이썬 언어로 마우스를 조작(컨트롤)하는 방법과 키보드를 제어하는 방법에 대해 알아봅니다.
마우스와 키보드를 제어하기 위해pyautogui 라이브러리(모듈)을 설치해야합니다.
그런 다음 import pyautogui 선언하여 라이브러리를 사용할 수 있습니다.
윈도우 콘솔(CMD)창 혹은 파이참 터미널 창에서 다음 명령어를 실행하여 설치하세요.
pip3 install pyautogui |
[설치 과정의 log 내용]
PS C:\pythonProject> pip3 install pyautogui Collecting pyautogui Downloading PyAutoGUI-0.9.53.tar.gz (59 kB) |████████████████████████████████| 59 kB 1.7 MB/s Collecting pymsgbox Downloading PyMsgBox-1.0.9.tar.gz (18 kB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing wheel metadata ... done Collecting PyTweening>=1.0.1 Downloading pytweening-1.0.4.tar.gz (14 kB) Collecting pyscreeze>=0.1.21 Downloading PyScreeze-0.1.28.tar.gz (25 kB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing wheel metadata ... done Collecting pygetwindow>=0.0.5 Downloading PyGetWindow-0.0.9.tar.gz (9.7 kB) Collecting mouseinfo Downloading MouseInfo-0.1.3.tar.gz (10 kB) Collecting pyrect Downloading PyRect-0.1.4.tar.gz (15 kB) Collecting pyperclip Downloading pyperclip-1.8.2.tar.gz (20 kB) Building wheels for collected packages: pyautogui, pygetwindow, pyscreeze, PyTweening, mouseinfo, pymsgbox, pyperclip, pyrect Building wheel for pyautogui (setup.py) ... done Created wheel for pyautogui: filename=PyAutoGUI-0.9.53-py3-none-any.whl size=36614 sha256=025c96bd8d331b48af0b9f273afefcf6cda41542b519e112f15270a884745c8 9 Stored in directory: c:\users\opening\appdata\local\pip\cache\wheels\d8\97\e4\d2edca92a87d3b5fbfb527264750a17b4ba297b9a7cab6e67f Building wheel for pygetwindow (setup.py) ... done Created wheel for pygetwindow: filename=PyGetWindow-0.0.9-py3-none-any.whl size=11078 sha256=57c877d611d4dc7f3fe8ce7ebc34c9fcb6c28fc8058862487b47ee92e4b8 2362 Stored in directory: c:\users\opening\appdata\local\pip\cache\wheels\44\ab\20\423c3a444793767e4e41f8377bc902f77bee212e68dcce85a5 Building wheel for pyscreeze (PEP 517) ... done Created wheel for pyscreeze: filename=PyScreeze-0.1.28-py3-none-any.whl size=13023 sha256=4805f3fc078e6894c9e02313725fcba448b9f1e5cbd592974c11aeef5afb149 b Stored in directory: c:\users\opening\appdata\local\pip\cache\wheels\a2\5b\86\99f1d8fac5d92de0ccb3f0d4ad15e3f4278baf75a9b0f20b93 Building wheel for PyTweening (setup.py) ... done Created wheel for PyTweening: filename=pytweening-1.0.4-py3-none-any.whl size=5854 sha256=e7e696b4ae04ed43faf1adfc761f237be2761405df2e7d03d245cc31b839f1c 7 Stored in directory: c:\users\opening\appdata\local\pip\cache\wheels\a4\5d\d2\ba4c8f82163233ffaadcf383c1e34d7d92635d357d13e7b78d Building wheel for mouseinfo (setup.py) ... done Created wheel for mouseinfo: filename=MouseInfo-0.1.3-py3-none-any.whl size=10905 sha256=2afc8ed3f9b3c53ce3c8e919cfefbd9997f969bad1156944dbcd31aed4623cdc Stored in directory: c:\users\opening\appdata\local\pip\cache\wheels\61\73\b9\6fb1131ab36e650206e3aa0ad7a68907b41b32ac2d4f75f543 Building wheel for pymsgbox (PEP 517) ... done Created wheel for pymsgbox: filename=PyMsgBox-1.0.9-py3-none-any.whl size=7420 sha256=cf28d77cad51f52eb77415c694c85593bb9b46d9ca5489cbdc2c2c6f50543f36 Stored in directory: c:\users\opening\appdata\local\pip\cache\wheels\7f\13\8c\584c519464297d9637f9cd29fd1dcdf55e2a2cab225c76a2db Building wheel for pyperclip (setup.py) ... done Created wheel for pyperclip: filename=pyperclip-1.8.2-py3-none-any.whl size=11137 sha256=ca5ade8fdd18aa3040f5bdc16d79631da8f87b56c06f6a63076a743dcf58337c Stored in directory: c:\users\opening\appdata\local\pip\cache\wheels\0c\09\9e\49e21a6840ef7955b06d47394afef0058f0378c0914e48b8b8 Building wheel for pyrect (setup.py) ... done Created wheel for pyrect: filename=PyRect-0.1.4-py2.py3-none-any.whl size=9547 sha256=fc2ef3a3f837d08db23f218d408e8b9edb7c6fd744ac7ef285233183a1ca09df Stored in directory: c:\users\opening\appdata\local\pip\cache\wheels\0e\d4\c5\b7f7be24ac0a168fd03d08afcc7c8928ef05cc1e319d1c136b Successfully built pyautogui pygetwindow pyscreeze PyTweening mouseinfo pymsgbox pyperclip pyrect Installing collected packages: pyrect, pyperclip, PyTweening, pyscreeze, pymsgbox, pygetwindow, mouseinfo, pyautogui Successfully installed PyTweening-1.0.4 mouseinfo-0.1.3 pyautogui-0.9.53 pygetwindow-0.0.9 pymsgbox-1.0.9 pyperclip-1.8.2 pyrect-0.1.4 pyscreeze-0.1.28 WARNING: You are using pip version 21.1.2; however, version 21.3.1 is available. You should consider upgrading via the 'C:\pythonProject\venv\Scripts\python.exe -m pip install --upgrade pip' command. PS C:\pythonProject>
마우스 실행정보 확인하는 프로그램 실행해봅니다.
import pyautogui pyautogui.mouseInfo()
마우스 커서의 X,Y 좌표 정보 및 RGB 값을 확인하기에 유용합니다.
현재 마우스 포인트 위치의 X좌표, Y좌표 구하는 방법
position()함수를 사용하여 좌표값을 구할 수 있어요.
(x, y) tuple of the current xy coordinates of the mouse cursor.
import pyautogui current_MouseX, current_MouseY = pyautogui.position() print('현재 마우스의 x좌표: ' + str(current_MouseX) + ' y좌표:' + str(current_MouseY))
파이썬 마우스 커서의 좌표 이동 방법
마우스 커서를 특정 위치로 이동시키는 방법은 move() 함수 또는 moveTo()함수를 이용하여 제어할 수 있어요.
moveRel()함수도 동일한 결과를 얻을 수 있으니, 아무거나 사용하세요.
#pyautogui.moveTo(x좌표, y좌표, 시간)
import pyautogui import time # 마우스 커서를 화면의 400, 400 좌표로 이동합니다. pyautogui.moveTo(400, 400) # 1초 뒤에 time.sleep(1) # 좌표 800,800으로 이동합니다. pyautogui.moveTo(800, 800)
import pyautogui # 마우스 커서의 현재 위치로부터 x,y만큼 이동 # duration=3은 3초동안 x,y좌표로 이동하라는 의미 pyautogui.move(200, 200, duration=3) pyautogui.move(-200, -200, duration=2) pyautogui.move(100, 100, duration=0.5)
import pyautogui # 현재위치에서 참조값 만큼 마우스 이동 # pyautogui.moveRel(x축 참조값, y축 참조값, 시간) # 현재 마우스 커서 위치에서 우측으로 200, 아래쪽으로 200 이동한다.( 2초 안에) pyautogui.moveRel(120, 120, 2)
파이썬 마우스 클릭 이벤트 제어하는 방법
마우스 클릭이벤트는 pyautogui.click()함수와 pyautogui.doubleClick()함수를 사용하여 제어할 수 있습니다. 동일한 기능을 하는 함수들도 살펴보아요.
# 마우스 왼쪽 버튼(1회 클릭) pyautogui.click() # 마우스 왼쪽 버튼 더블클릭 pyautogui.doubleClick() pyautogui.click(clicks=2) # 마우스 오른쪽 버튼 클릭하기 pyautogui.click(button='right') pyautogui.rightClick() # 마우스 휠 클릭 pyautogui.middleClick() # 마우스 버튼다운 pyautogui.mouseDown() # 마우스 버튼업 pyautogui.mouseUp() # 마우스로 특정좌표 클릭 pyautogui.click(x=823, y=584) # 1초 안에 더블 클릭 1회 pyautogui.click(clicks=2, interval=1) #마우스 왼쪽 버튼 10회 클릭 pyautogui.click(clicks=10)
# 마우스 클릭 응용하기 pyautogui.moveTo(800, 800) pyautogui.click() time.sleep(1) pyautogui.move(0, 100, duration=0.5) pyautogui.doubleClick()
# 마우스 클릭 응용하기2 (선긋기) pyautogui.moveTo(200, 200) pyautogui.mouseDown() # 마우스 왼쪽버튼 클릭 pyautogui.moveTo(400, 400) # 버튼 누른 상태로 좌표이동 pyautogui.mouseUp() # 마우스 외쪽 클릭 해제
파이썬 마우스 드래그 및 스크롤 제어 하는 방법
마우스를 드래그하기 위해서 pyautogui.dragTo()함수 또는 pyautogui.dragRel()함수를 사용할 수 있습니다.
마우스 스크롤의 경우 pyautogui.scroll()함수를 사용하여 처리합니다.
# 마우스 드래그 pyautogui.mouseDown(x=100, y=100) pyautogui.mouseUp(x=200, y=200) # 마우스 드래그 # 마우스 현재 위치에서 x=100, y=100로 드래그 pyautogui.dragTo(x=100, y=100) # 2초안에 마우스 현재 위치에서 x=100, y=100로 드래그 pyautogui.dragTo(x=100, y=100, duration=2) # 2초안에 마우스 현재위치에서 -100, -100위치로 드래그 pyautogui.dragRel(-100, -100, duration=2) # 마우스 스크롤 (위로) pyautogui.scroll(-100) # 마우스 스크롤 (아래로) pyautogui.scroll(100) # 특정 위치로 이동(x=100, y=100) 후 스크롤 pyautogui.scroll(200, x=100, y=100)
파이썬 pyautogui 기타 기능 더 살펴보기
1. 모니터 해상도 (가로, 세로 ) 확인하는 방법
pyautogui.size()함수를 이용하면 픽셀 단위로 스크린 사이즈를 리턴하며, 리턴되는 데이터 타입은 튜플 자료형입니다.
import pyautogui width, height = pyautogui.size() print('가로: ' + str(width) + ' 세로:' + str(height))
2. 화면 스크린샷 생성 후 이미지로 저장하기
#전체화면 스크린샷 img = pyautogui.screenshot() img.save('screenshot.png') #화면의 일부영역 스크린샷 img2 = pyautogui.screenshot('region.png', region=(100,100,400,400))
3. 좌표값의 색상 픽셀값 비교하는 방법
import pyautogui # 특정 위치(x,y) 좌표의 색상값 비교 p = pyautogui.pixel(1000,100) print(p) if pyautogui.pixelMatchesColor(1000, 100, p): print('일치') else: print('불일치') if pyautogui.pixelMatchesColor(1000, 200, p): print('일치') else: print('불일치')
파이썬 pyautogui 메시지 박스 사용하는 방법
- alert()함수를 사용하여 알림창을 호출합니다.
import pyautogui as pg a = pg.alert(text='내용', title='제목', button='OK') print(a) # OK출력
- pyautogui.confirm()함수를 사용하여 확인창을 호출합니다.
import pyautogui as pg a = pg.confirm(text='집에갈래요?', title='알림', buttons=['OK', 'Cancel']) # 취소버튼 클릭시 Cancel을 출력, 확인버튼 클릭시 OK 출력 print(a)
파이썬 패스워드 입력창 메세지 박스 호출하는 방법
- pyautogui.password()함수를 사용하여 비밀번호 입력과 같은 메세지 박스를 호출합니다.
import pyautogui as pg a = pg.password(text='비밀번호를 입력하세요', title='알림', default='1234', mask='*') print(a)
파이썬 프롬프트 입력창 메시지박스 호출방법
- pyautogui.prompt()함수를 사용하여 프롬프트 , 입력창이 있는 메세지 박스를 표시해요.
- OK버튼을 누르면 입력한 텍스트를 리턴합니다.
- Cancel 버튼을 누르면 None 값이 리턴됩니다.
import pyautogui as pg a = pg.prompt(text='이름을 입력하세요', title='알림', default='입력하세요') print(a)
파이썬 키보드(keyboard) 제어하는 방법
pyautogui.write()함수와 pyautogui.typewrite()함수를 이용하여 문자열 입력이 가능합니다.
# 엔터키 누르기 pyautogui.press('enter') # 여러 키 연속으로 입력하기 pyautogui.press(['backspace', 'enter', 'enter']) pyautogui.press(['enter','enter','enter','enter']) # 키보드의 쉬프트를 누르고 유지 # pyautogui.keyDown('shift') # 쉬프트키 누름 해제 # pyautogui.keyUp('shift')
다음 예제는 2초 후 마우스 왼쪽 버튼 클릭이 발생합니다.
그리고 Hello python 타이핑 후 엔터키를 치는 이벤트가 발생한 후 다시 타이핑 하는 예제입니다.
다음 코드를 실행 한 후 메모장에 마우스 커서를 이동시켜보세요.
import pyautogui import time # 텍스트 입력 해보기 time.sleep(2) pyautogui.click() pyautogui.write('Hello python') pyautogui.press('enter') pyautogui.write('Hello pyautogui', interval=0.1)
# 텍스트 입력 pyautogui.typewrite('Hello python') # 인터벌을 주면 입력 속도를 느리게 할 수 있어요 pyautogui.typewrite('Hello!', interval=0.25)
키를 여러번 입력하는 경우 다음과 같은 방식으로 입력 # 왼쪽 방향키를 세번 입력 case pyautogui.press(['left', 'left', 'left']) pyautogui.press('left', presses=3) # enter 키를 2초에 한번씩 5번 입력합니다. pyautogui.press('enter', presses=5, interval=2)
파이썬에서 키보드 제어시 한글은 입력불가합니다.
한가지 꼼수로 메모장과 같은 편집모드에서 한글 입력모드(IME)라면 한글을 영어타이핑대로 입력하면 영어로 타이핑이 되지만 한글쓰기가 가능합니다.
import pyautogui import time pyautogui.typewrite('dkssudgktpdy!!')
import pyautogui # pyautogui.click() # pyautogui.press('tab') # pyautogui.press(['space', 'pgup', 'pgdn'])
# 키를 누른 상태로 유지 후 떼기 ( Ctrl + C ) pyautogui.click() pyautogui.keyDown('ctrl') pyautogui.press('c') pyautogui.keyUp('ctrl')
파이썬 단축키 사용을 위한 pyautogui.hotkey()함수 이용하는 방법
여러 키를 동시에 입력해야하는 keyDown()함수와 keyUp()함수 이용의 불편함을 해소하기 위해 hotkey()함수를 사용합니다.
import pyautogui import time #단축키 사용 pyautogui.click() pyautogui.hotkey('ctrl', 'shift', 'e') time.sleep(0.5) pyautogui.hotkey('ctrl', 'shift', 'f')
import pyautogui # 복사 붙이기 # Ctrl + C (단축키 = hotkey) pyautogui.hotkey('ctrl', 'c') # Ctrl + V pyautogui.hotkey('ctrl', 'v')
파이썬 키보드 제어를 위한 입력(press) 가능한 키 리스트
'\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback', 'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright'
파이썬 pyautogui 라이브러리 응용하여 매크로 만들기
[REFERENCE]
https://pyautogui.readthedocs.io/en/latest/