기타개발/파이썬 업무자동화

파이썬 pyautogui를 이용한 업무자동화

콘파냐 2019. 12. 15. 22:13
반응형

업무자동화를 하면 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을 반환할 수도 있다. 이 때는 이미지를 다시 캡처하던지 아니면 이미지 이름을 바꾸는 것도 필요하다.(영문추천) 바탕화면은 언제라도 바뀔 수 있으므로 파일의 위치나 배경화면 변경시 인식안될 수 있으므로 주의할 필요가 있다.

반응형