파이썬 프로그래밍

파이썬 매크로 pyautogui 키보드 마우스 자동 제어 기능

코니코니 2022. 10. 2. 12:00
반응형

파이썬 매크로 pyautogui 키보드 마우스 자동 제어 기능


파이썬을 사용해서 키보드와 마우스 등을 제어하여 귀찮은 작업들을 자동화 시킬 수 있습니다. 물론 윈도우 자체적으로 조작이 되기 때문에 다양한 변수를 적절하게 주지 않으면 윈도우 전체에서 입력이 잘못 되어서 오류가 발생할 수 있기 때문에 pyautogui로 프로젝트를 만들 때는 좀 더 세밀하게 코드를 작성할 필요가 있습니다.

pyautogui를 사용하기 이전에 pip install opencv-python을 통해서 해당 모듈을 설치하는 것을 추천합니다. pyautogui에서 이미지 인식 기능을 사용할 때 꼭 필요한 모듈입니다!

해당 모듈을 사용하기에 앞서서 두가지 옵션은 미리 알고 갈 필요가 있겠네요.

import pyautogui

# 화면 모서리에 마우스가 가더라도 자동화 진행
pyautogui.FAILSAFE = False
# pyautogui 함수 반복 사용 시 최소 대기시간 (기본 0.1)
pyautogui.PAUSE = 0.01

보통 pyautogui는 마우스가 화면 모서리에 가있으면 에러가 걸리면서 작동이 중지됩니다. 자동화 기능 테스트 중에서 어떤 문제를 발견했을 때 조작이 힘들 수 있어서 보통은 마우스를 구석으로 보내서 강제 에러를 발생시켜 프로그램을 종료하곤 합니다. 만약 해당 기능을 끄고싶다면 pyautogui.FAILSAFE를 False로 바꿔주면 되고 기본 값은 True입니다.

그리고 pyautogui에서 여러 함수들을 연속적으로 사용할 때 기본 대기시간은 0.1초입니다. 예를 들어 마우스 클릭을 10번 하는 코드를 작성했다고 했을 때 아무런 sleep 기능을 안넣어도 최소 걸리는 시간은 1초라는 것이죠. 만약 어떤 작업을 더 빠르게 하려면 해당 숫자를 내려주면 됩니다. 0.01이라고 적는다면 10번의 반복되는 클릭 작업이 0.1초만에 가능하겠죠.

# 이미지가 있다면 좌표 및 크기
image_ck_1 = pyautogui.locateOnScreen(r'main.png', confidence=0.9)
print(image_ck_1)

==결과==
Box(left=1323, top=167, width=205, height=199)

pyautogui.locateOnScreen 기능은 지정한 이미지의 화면상 위치와 이미지 크기를 가져와주는 함수입니다. 여기서 confidence 0.9는 이미지를 찾을 때 정확도를 나타내는데 이 기능을 사용하려면 pip install opencv-python을 통해 해당 모듈을 설치해야 합니다.

# 이미지가 있다면 가운데 좌표
image_ck_2 = pyautogui.locateCenterOnScreen(r'main.png', confidence=0.9)
print(image_ck_2)

==결과==
Point(x=1425, y=266)

pyautogui.locateCenterOnScreen 기능은 지정한 이미지의 가운데 좌표를 가져옵니다. 이 기능은 이미지 좌표를 찾아서 클릭을 할 때 유용합니다.

image_ck_2 = pyautogui.locateCenterOnScreen(r'main.png', confidence=0.9)
pyautogui.click(image_ck_2)

만약 locateCenterOnScreen 기능을 통해서 지정한 이미지가 확인이 된다면 x,y좌표를 가져오게 되고, 그 좌표를 pyautogui.click 변수값에 넣어주면 해당 좌표를 실제로 마우스가 클릭하게 됩니다.

pyautogui.click(x=None, y=None)

click 함수의 x,y 값은 따로 값을 주기 이전까지 None으로 설정이 되어있습니다. 만약 locateCenterOnScreen에서 이미지 위치를 찾지 못한다면 현재 마우스 위치에서 클릭을 하게 됩니다. 그래서 이 기능을 매크로에서 사용하려면 if문과 함께 사용하는 것이 좋습니다.

image_ck_2 = pyautogui.locateCenterOnScreen(r'main.png', confidence=0.9)
# 만약 image_ck_2에서 이미지 좌표를 찾았다면
if image_ck_2:
    pyautogui.click(image_ck_2)

클릭 함수로 마우스 클릭도 가능하지만 더블클릭, 좌클릭, 우클릭, 가운데 클릭 등을 지정할 수도 있습니다.

pyautogui.doubleClick()
pyautogui.leftClick()
pyautogui.rightClick()
pyautogui.middleClick()

이런 식으로 원하는 클릭 방식을 선택할 수 있어요!

마우스 클릭 뿐만 아니라 키보드를 자동으로 입력되게끔도 가능합니다. 참고로 pyautogui는 한글 입력이 되지 않습니다. 영어만 인식이 되는데 한글 입력하는 방법은 아래에 따로 작성할게요!

# 키보드 키를 누른 다음 떼기를 수행
pyautogui.press('a')

단순하게 하나의 키보드를 입력합니다.

# 문장을 순서대로 입력 (영어만 가능)
pyautogui.typewrite('abcde', interval=0.5)

적힌 문자를 순서대로 입력합니다. interval을 통해서 문자마다 입력 대기시간을 정할 수 있습니다.

# 순서대로 입려된 키를 누름
pyautogui.hotkey('ctrl', 'v')

복사, 붙여넣기 등 여러 키를 동시에 눌러야 할 때 사용됩니다.

이 pyautogui를 사용하면 한글을 인식하지 못한다는 단점이 있는데 이 문제를 해결하려면 두가지 방법을 사용할 수 있습니다.

import pyautogui
import pyperclip

# 클립보드에 내용 복사
pyperclip.copy('이거 복사된다!')

# 순서대로 입려된 키를 누름
pyautogui.hotkey('ctrl', 'v')

클립보드 모듈을 사용할 수 있습니다. pyperclip.copy() 기능을 사용하면 입력한 문자열이 실제 윈도우 클립보드에 복사가 됩니다. 이제 복사가 된 내용을 hotkey 붙여넣기 기능을 사용해서 그대로 한글 입력이 가능하게 됩니다.

# 한영키
pyautogui.press('hangul')
# 순서대로 입려된 키를 누름
pyautogui.typewrite('dkssudgktlsrk!')

다음은 한영키를 눌러줌으로써 한글 배열에 맞춰서 영어를 작성해주는 조금 귀찮은 방법을 사용할 수 도 있겠죠. 이렇게 하면 오타 찾기도 어렵고 해서 보통은 위에 적은 클립보드 기능을 많이 사용하긴 합니다!

반응형