업무자동화를 하면 1당 100의 효율로 쉽게 일을 처리할 수 있는 일이 많다. 예를들어 메일을 발송하는데 똑같은 내용을 수십명에게 보낼 경우 처럼 반복적인 일을 할 때 더욱 그렇다.
파이썬의 pyautogui라는 패키지를 사용하면 이런 반복적인 작업을 쉽게할 수 있다. 물론 작업의 성격에 따라서 안되는 것도 있지만, 예전에 사용하던 매크로 프로그램이 할 수 있는 일들은 대부분 다 할 수 있다.
참고로 pyautogui는 2014년도에 처음 release되었다.
pyautogui의 기본적이 기능을 익히면 응용은 대단히 쉽다. 물론 파이썬을 조금이라도 안다면 말이다.
이 패키지가 가지고 있는 함수를 먼저 알아보자.
주요함수
position : 마우스 커서의 위치좌표 (*모니터 스크린 왼쪽 위가 좌표가 (0, 0)으로 기준이 되면 좌표는 pixel단위임)
locateOnScreen : 이미지의 위치를 Box형식으로 반환
(예) Box(left=1879, top=1, width=33, height=29)
(반환된 값은 . 연산자로 접근 가능 반환값.left, 반환값.top)
locateCenterOnScreen : 이미지의 중앙 위치를 Point 형식으로 반환
(예) Point(x=1895, y=15)
keyDown : 키보드 누르기
(예) keyDown("F2")
hotkey : 키 조합으로 키보드 누르기
(예) hotkey('ctrl', 'a')
doubleclick : 좌표를 인수로 전달하면 해당 위치에서 마우스 더블클릭
사람이 하는 일은 키보드 누르거나 마우스 클릭이 전부인 경우가 많다. 따라서 위 함수만 가지고도 충분히 많은 일을 할 수 있다.
이 함수들 외에도 더 있고 https://pyautogui.readthedocs.io/en/latest/ 에 가면 영문이지만 나머지 함수들에 대한 설명이 되어있다.
대부분 직관적으로 이해하기 쉬으므로 locate* 함수만 설명하겠다.
locate* 함수
사용할 때는 클릭을 할 이미지를 인수로 전달받는다. 쉽게 말해서 함수로 전달된 인수와 똑같은 이미지가 모니터 화면에 있는지를 체크하고 그 위치를 반환해주는 함수다. 멋지지 않은가?
따라서 이 함수를 사용하려면 먼저 클릭이 필요한 부분을 스크린 캡쳐를 해야한다.
한번 다음과 같은 두 개의 동일한 아이콘 다른이름의 파일을 바탕화면에 생성해보고 스크린 캡처를 해보도록 하자.
png 이미지 형식으로 각각의 파일을 캡쳐한 화면이다. 이제 이 이미지를 함수로 읽어들인 후에 자동으로 클릭하는 코드를 살펴보자. png 이미지의 위치는 ("C:/auto/img/hello.png", "C:/auto/img/hi.png") 이다.
(먼저 cmd 창에서 pip install pyautogui 명령으로 패키지 설치는 해 놓을 것)
pyautogui이름이 너무 길어 pag로 단축해서 쓰기로 한다.
이미지를 읽어들이면 반환된 값에서 접근연산자(.) 으로 x, y 값에 접근이 가능하다.
이렇게 x, y 위치를 읽어들인 후 doubleClick함수를 실행하면 해당 좌표를 더블클릭하여 파일이 열린다.
주의할 점은 이미지 인식이 100%가 아닌 듯 싶으므로 locateCenterOnScreen을 사용했을 때 None을 반환할 수도 있다. 이 때는 이미지를 다시 캡처하던지 아니면 이미지 이름을 바꾸는 것도 필요하다.(영문추천) 바탕화면은 언제라도 바뀔 수 있으므로 파일의 위치나 배경화면 변경시 인식안될 수 있으므로 주의할 필요가 있다.