카테고리 없음

[Python] 매크로를 만들어보자 / pyautogui, keyboard

대장코린이 2023. 7. 19. 22:02

안녕하세요, 대장코린이입니다.

오늘은 pyautogui를 이용해 매크로를 만들어볼건데요.

이거 할줄알면 생각보다 되게 재밌고 유용하더라구요.

회사에서도 반복되는 작업이 있으면 매크로를 만들어서 작업하기도 합니다.

도움이 되었으면 좋겠습니다.


목차
1. 마우스 좌표 불러오기 : gui.position
2. 마우스 다루기
3. 간단한 매크로 만들기

1. 마우스 좌표 불러오기 : gui.postion

매크로란 사람이 하기 귀찮은 작업을 대신 해주는 프로그램을 말합니다.

단순히 내가해야하는 작업을 컴퓨터가 똑같이 한다 생각하면 됩니다.

말 그대로, 내가 마우스를 움직여야하면 똑같이 움직이고, 클릭해야하면 똑같이 클릭하고, 키를 입력해야하면 똑같이 입력하는 것을 만드는거죠.

 

그러기 위해선 화면상의 좌표를 알아내는 것이 매우 중요한데, 오늘은 그것부터 차근차근 배워볼게요.

## 모듈 불러오기
import pyautogui as gui
import keyboard
import time

#마우스 좌표 불러오기
pos = gui.position()

마우스 좌표를 불러오는 방법은 pyautogui의 position()이라는 함수입니다.

In [1]: pos
Out[1]: Point(x=815, y=909)

보시는 것처럼, 좌표가 불러왔죠?

근데 마우스를 움직이지 않고 프로그램을 실행시키고 하나하나 좌표를 찾으려니 참 불편합니다.

그래서 저는 따로 함수를 만들어서 사용합니다.

def get_positions():
    locations = []
    while 1:
        if keyboard.is_pressed('F1'):
            pos = gui.position()
            print(pos)
            locations.append(pos)
            time.sleep(0.5)
        if keyboard.is_pressed('F2'):
            print('stop record coordinate')
            return locations

이렇게 말이죠.

간단히 설명드리자면, F1을 누르면 해당 마우스 지점의 좌표가 리스트에 저장되고, F2를 누르면 기록을 중지하고 저장된 좌표 리스트를 반환하는 함수에요.

저 keyboard 모듈도 많이 사용되는 모듈인데 일단은 당장 필요한 부분에 대해서만 알아갑시다.

 

이제 좌표를 아주 편리하게 얻을 수 있게 되었습니다.

이걸 적극적으로 활용해볼게요~


2. 마우스 다루기

이번엔 마우스를 다뤄볼건데요, 기본적인 것 위주로 한번 해봅시다.

pos = gui.position()
gui.moveTo(pos)

 

기록한 좌표로 마우스 옮기기

 

gui.click(pos,button = 'left', clicks=2,interval = 1)

기록한 좌표로 마우스 클릭할건데, 왼쪽 버튼을 누를거고 총 두번을 클릭할거야, 근데 1초간격으로 클릭할게~ 라는 뜻입니다.

 

gui.dragTo(pos,duration=0.25)

기록한 좌표로 마우스 드래그하기~ duration으로 속도 조절해요.

 

gui.mouseDown()
time.sleep(5)
gui.mouseUp()

마우스 5초동안 누르고있다 떼기~

간단하죠?

 

이걸로 간단하게 그림판에 그림을 그려볼게요.

import pyautogui as gui
import keyboard
import time


pos = gui.position()

def get_positions():
    locations = []
    while 1:
        if keyboard.is_pressed('F1'):
            pos = gui.position()
            print(pos)
            locations.append(pos)
            time.sleep(0.5)
        if keyboard.is_pressed('F31'):
            print('stop record coordinate')
            return locations
        
pos = get_positions()

for i,p in enumerate(pos):
    if i == 0:
        gui.moveTo(p)
    else:
        gui.dragTo(p)
    time.sleep(1)

 

녹화_2023_07_19_21_53_19_880 (online-video-cutter.com).mp4
0.61MB

 

이렇게 좌표를 입력하면 입력한 좌표대로 그림을 그려주는 아주아주 간단한 매크로를 만들어봤습니다~


어때요 어렵지 않았죠?

지금은 매우매우 간단한 것들만 배워서 이걸 어따써~ 할 수 있지만,

결국 사람이 하는 일이라는게 마우스 움직여서 클릭하고, 이미지 찾아서 판단하고, 키보드 입력하는 것이 모여서 복잡한 작업을 하듯이 이런 간단한 기능들을 잘만 이용하면 복잡한 매크로도 만들 수 있어요~

 

여담이지만 저는 이걸로 스톤에이지라는 지금은 서버를 종료한 게임이 있는데,

여기서 펫을 잡고 능력치를 골라내고, 데미지를 계산하고 등등 복잡한 매크로도 만들어서 사용했었어요 ㅎㅎ

물론 개인 서버에서 매크로 연습을 위해 만든거긴 합니다 ㅎㅎ...

기회가 된다면 코드를 공유해볼게요~

 

아무튼 도움이 되었으면 좋겠습니다.

뿅 ㅎㅎ