반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 엑셀이나 웹브라우저처럼 파이썬 전용 패키지가 없어서 조작을 할 수 없는 경우에 아주 유용한 PyAutoGUI라는 패키지에 대해서 배워보겠습니다.

 

저는 회사에서 SAP사의 ERP(Enterprise Resource Planning)를 사용하는데, 이걸 자동화 시키려고 하니깐 무료로 제공하는 API가 없어서 고민하던 중 해당 패키지를 사용하면 좋겠다는 생각이 들어서 공부해보게 되었답니다.


PyAutoGUI란?

 

https://pyautogui.readthedocs.io/en/latest/index.html

 

Welcome to PyAutoGUI’s documentation! — PyAutoGUI documentation

Welcome to PyAutoGUI’s documentation! PyAutoGUI lets your Python scripts control the mouse and keyboard to automate interactions with other applications. The API is designed to be as simple. PyAutoGUI works on Windows, macOS, and Linux, and runs on Pytho

pyautogui.readthedocs.io

 

PyAutoGUI는 마우스/키보드 자동제어를 위한 패키지입니다. 흔히 알고계시는 수강신청, 콘서트 티켓 예매 매크로 같은 것을 가능케 하는 것이라 이해하시면 되겠습니다.

 

흔히 운영체제(OS)에 관계없이 모두 사용가능한 패키지를 크로스 플랫폼이라고 부르는데, PyAutoGUI가 바로 크로스 플랫폼 패키지입니다. 즉, Window, macOS, Linux와 같은 대중적인 운영체제에 모두 적용가능하다는 말입니다.

 

 

설치 방법

 

터미널 창에 pip 또는 conda를 통해서 설치를 하시면 됩니다. Anaconda 패키지로 파이썬을 설치하신 분이라면 두가지 중 아무거나 선택하시면 되고, 순정 파이썬을 설치하셨다면 pip로만 설치 가능합니다.

 

pip install pyautogui
conda install -c conda-forge pyautogui

 

사용 방법

 

1. 모니터 크기(해상도)와 마우스 현재 위치 얻기

 

PyAutoGUI는 크게 마우스와 키보드 조작 기능으로 나눌 수 있습니다. 그리고 마우스 조작을 위해서는 좌표에 대한 이해가 필요합니다. 

 

PyAutoGUI는 모니터 화면의 가장 왼쪽 위 꼭지점을 영점(0,0)으로 하며, 픽셀 단위로 x,y좌표를 가집니다.

 

0,0       X increases -->
+---------------------------+
|                           	| Y increases
|                           	|     |
|   1920 x 1080 screen      	|     |
|                           	|     V
|                           	|
|                           	|
+---------------------------+ 1919, 1079

 

 

여러분들의 모니터 해상도와 현재 마우스 위치를 확인해보기 위해서 아래의 코드를 실행해봅시다. 

 

import pyautogui

# 현재 사용하는 모니터의 해상도 출력
print(pyautogui.size())

# 현재 마우스 커서의 위치 출력
print(pyautogui.position())


<결과>

>>> Size(width=1680, height=1050)
>>> Point(x=1675, y=18)

 

참고로, 저는 트리플 모니터를 사용하는데, 사이즈는 항상 1680, 1050으로 나오며, 마우스 커서의 위치는 가장 기본 모니터인 맥북 화면의 좌측상단을 기준으로 마이너스 값이 나오기도 하고, x가 3000이 넘는 값이 나오기도 하네요.

가장 아래 모니터가 기본 모니터

 

Tip. 마우스 현재 위치 & RGB 색상 실시간으로 얻기

 

이 기능을 알기 전엔 제가 의도하는 위치의 x, y 값을 얻기위해서 위에서 배운 print(pyautogui.position( ))을 무한 반복했었습니다. 하지만 이 코드 한 줄이면 정말 편리하게 원하는 좌표를 얻을 수 있답니다.

 

pyautogui.mouseInfo()

 

참고로, windows OS 에서는 RGB 값까지 출력되지만, mac OS에서는 RGB값을 못받아오네요.

 

Windows에서 실행 시

 

macOS에서 실행 시

 

2. 마우스 이동

 

마우스를 이동하는 방법은 두 가지가 있습니다. 위에서 언급한 영점을 기준으로 좌표를 찍어 이동하는 절대 이동과 현재 커서의 위치를 기준으로 지정한 만큼 이동하는 상대 이동입니다. 코드를 보시면 바로 이해 가실거예요!

# 절대 좌표로 이동

pyautogui.moveTo(100, 100)                 # 100, 100 위치로 즉시 이동
pyautogui.moveTo(200, 200, duration=0.5)   # 200, 200 위치로 0.5초간 이동


# 상대 좌표로 이동

pyautogui.move(100, 100, duration=1)    # 현재 위치 기준으로 100, 100만큼 1초간 이동

 

3. 마우스 클릭

마우스를 이동하는 법을 배웠으면 클릭하는 법도 배워야겠죠?

 

가장 많이 사용하실 함수는 click( ) 함수입니다. 아래와 같이 많은 옵션이 있으니 하나하나 알아보겠습니다.

pyautogui.click(x=None, y=None, clicks=1, interval=0, button=PRIMARY, 
                duration=0, tween=linear, logScreenshot=None, _pause=True)

 

단순히 해당 위치에서 클릭을 수행합니다.

pyautogui.click()

 

<여기서 잠깐>

 

macOS의 경우엔 아래와 같이 권한 허용을 해주셔야지, 마우스 클릭 제어를 할 수 있습니다.

 

 

해당 위치로 가서 클릭을 수행합니다.

pyautogui.click(200, 200)

 

해당 위치에서 총 2번 클릭하며, 클릭간의 시간은 0.2초입니다. 마우스는 오른쪽 버튼을 클릭합니다.

참고로, button 옵션을 설정안하면 기본적으로 왼쪽 버튼으로 클릭하며, 'middle'과 'right', 'left'를 옵션으로 넣어줄 수 있습니다.

pyautogui.click(clicks=2, interval=0.2, button='right')

 

그 외의 옵션은 거의 사용하지 않으므로 생략하도록 하겠습니다.

 

 

4. 마우스 드래그

 

마우스를 드래그 하는 경우도 종종 있습니다. 사용법은 click 함수와 거의 같습니다.

# 1초간 400, 400 위치로 이동 후, 절대 좌표 500, 500으로 2초간 드래그
pyautogui.click(400, 400, duration=1)
pyautogui.dragTo(500, 500, 2, button='left')

# 현재 마우스 위치 기준으로 300, 300 범위만큼 왼쪽 버튼으로 드래그
pyautogui.dragRel(300, 300, 2, button='left')

 

5.  스크롤 내리기/올리기

 

우리는 마우스 휠을 조작해서 페이지의 스크롤을 내리고 올립니다. 이것도 아래의 코드로 가능합니다.

 

# 양수이면 위, 음수이면 아래

pyautogui.scroll(-100) 

pyautogui.scroll(100) 

 

오늘은 PyAutoGUI가 무엇인지와 마우스 사용법에 대해서 공부해봤습니다.

 

다음시간에는 키보드 사용법을 공부해 보겠습니다.


<참고 자료>

 

<나도코딩_업무자동화 유튜브 강의>

https://www.youtube.com/watch?v=exgO1LFl9x8&t=3083s 

 

<Codetorial PyAutoGUI Tutorial>

https://codetorial.net/pyautogui/mouse_control.html

 

반응형

+ Recent posts