안녕하세요. 이번에는 파이썬 라이브러리 중 자동화에 쓰이는 pyautogui에 대해 알아보겠습니다. 사용법도 매우 간단하기 때문에, 파이썬을 잘 모르는 분들이나, 초보자분들도 쉽게 따라하실 수 있습니다. 자세한 내용을 알고싶으시다면 아래 사이트를 참고하시길 바랍니다.
https://pypi.org/project/PyAutoGUI/
PyAutoGUI
PyAutoGUI lets Python control the mouse and keyboard, and other GUI automation tasks. For Windows, macOS, and Linux, on Python 3 and 2.
pypi.org
pyautogui 설치
파이썬 라이브러리이다보니 매우 간단하게 설치하실 수 있습니다. Python과 Pip이 깔려있다는 전제하에 command창에 다음 명령어를 입력하시면 됩니다.
>pip install pyautogui
설치가 완료되면, import를 시켜 코딩을 시작해보도록 하겠습니다.
import pyautogui
pyautogui 주요 기능
1. screenshot()
화면을 캡쳐하는데 이용되는 함수입니다.
#캡쳐 후 저장
screenshot = pyautogui.screenshot()
screenshot.save('C:\my_screenshot.png')
#캡쳐 저장 동시
screenshot2 = pyautogui.screenshot('C:\my_screenshot2.png')
해당 기능은, UI를 자동화하여 돌려놓았을때, 주기적으로 캡쳐를 해두면 간혹 자동화 동작이 잘 되지 않았을 때 원인을 파악하는 용도로 쓰면 좋은 것 같습니다.
2. locateOnScreen()
화면을 인식하여 미리 저장해둔 이미지가 화면상에 존재하는지 파악하는 함수입니다.
#click_button.png가 현재 화면에 있는지
clickBtn = pyautogui.locateOnScreen('click_button.png')
clickBtn은 만약 현재 화면에 해당 버튼이 존재한다면 해당 location을 return 합니다
return 값 : (left, top, width, height)
3. 마우스 컨트롤
자동화를 하기 위해서는 마우스와 키보드를 주로 사용하게 될텐데, 우선 마우스를 어떻게 컨트롤하는지 알아보겠습니다.
#1.마우스 이동
pyautogui.moveTo(100, 200) #x 100, y 200 위치로 이동
pyautogui.moveTo(100, 200, 5) # 해당 위치로 5초동안 이동
#2.마우스 클릭
pyautogui.click()
pyautogui.click(button='right') #우클릭
pyautogui.doubleClick() #더블 클릭
pyautogui.click(clicks=5, interval=1) #1초 간격으로 5번 클릭
#3.마우스 드래그
pyautogui.moveTo(100, 200)
pyautogui.dragTo(300, 500) #(100, 200)에서 (300, 500)까지 드래그
앞에서 살펴본 locateOnScreen() 함수를 사용하여 원하는 이미지의 위치를 찾아내고 해당 위치로 마우스를 moveTo 하고, 클릭하면 원하는 부분을 클릭하는 코드가 완성됩니다.
4. 키보드 컨트롤
키보드는 어떻게 컨트롤하는지 알아보겠습니다.
(1). hotkey()
#hotkey : 키보드 하나씩 입력
pyautogui.hotkey('win') #윈도우 키를 누릅니다.
pyautogui.hotkey('ctrl', 'c') #여러개를 인자로 넣어 동시에 누르게 할 수 있습니다
''' hotkey list
['\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']
'''
hotkey를 사용하여 복사(ctrl , c), 붙여넣기(ctrl, v), 윈도우 실행(win, r) 등 단축기로 사용하던 것들을 실행할 수 있습니다.
(2). write()
pyautogui.write("낙서코딩 블로그입니다") #괄호 안의 문자 입력
pyautogui.write("낙서코딩", interval = 1) #한글자씩 1초 간격으로 입력
다른 함수들도 많지만, 사실상 위의 두 함수만 사용해도 무방합니다.
마무리
이번 포스팅에서는 아주 기본적인 내용들만 알려드렸지만, 해당 기능들만 사용해도 웬만한 것은 다 자동화 할 수 있습니다. 하지만 여러 컴퓨터에서 자동화 프로그램을 돌리고 싶다면, 고려해야할 부분이 늘어납니다. 예를 들어 locatOnScreen() 함수를 사용하는데, 버튼 이미지가 컴퓨터마다 해상도가 달라 인식을 못할 수도 있고, 어느 위치로 마우스를 moveTo() 하려는데 해상도 차이로 각각의 위치가 다를 수도 있습니다. 이러한 부분들은 위치가 아닌 해당 버튼을 객체로 인식하여 이동하는 방법이 있는데 다음 포스팅에서 소개해드리도록하겠습니다.
'코딩 낙서' 카테고리의 다른 글
웹을 빛나게 하는 HTML: 디자인의 비밀 찾기 (18) | 2023.07.18 |
---|---|
컨테이너의 장점과 활용: 현대 개발 환경에서의 필수 요소 (16) | 2023.07.17 |
깃허브(Git Hub)으로 협업하는 방법과 Best Practice (6) | 2023.07.09 |
프로그래밍 언어의 세 가지 패러다임: 절차지향, 객체지향, 함수지향 (7) | 2023.07.06 |
안드로이드 앱 개발 언어 Kotlin vs Java (5) | 2023.07.04 |