PYAutoGUI의 기본(마우스 편)

신주형·2023년 6월 23일
0

PyAutoGUI

목록 보기
1/2
post-thumbnail

오토마우스가 필요해 만들어야겠다고 생각했다.
파이썬으로 컴퓨터와 마우스를 자동으로 움직이는데 pyautogui라이브러리를 자주 사용해
pyautogui에 대해 먼저 소개한 뒤 다음 글에서 오토마우스를 만들어 보겠다.


pyautogui란?

PyAutoGUI는 마우스/키보드 자동 제어를 위한 cross-platform 파이썬 모듈이다.
PyWin32는 Windows 전용이기 때문에 다양한 운영체제에서 자유롭게 마우스와 키보드의 동작을 컨트롤하기 위해서는 pyautogui 모듈을 사용해야 한다.

각 운영체제에서 사용하는 PyAutoGUI

  • Windows에서 PyAutoGUI는 Win32 API 를 사용
  • macOS에서 PyAutoGUI는 Cocoa API에 접근하기 위해 pyobjc 모듈을 사용
  • Linux에서 PyAutoGUI는 X11 또는 X Window System에 접근하기 위해 Xlib 모듈을 사용

결론은 Python과 PyAutoGUI를 이용해서 마우스, 키보드를 자동 제어하고 업무 자동화 등에 활용할 수 있게 되는 것이다.

pyautogui 설치

다음 명령어를 입력해서 PyAutoGUI를 설치 할 수 있다.

pip install pyautogui

conda install -c conda-forge pyautogui

pyautogui사용하기

먼저 pyautogui의 기본적인 기능들을 살펴보고 상세 기능으로 넘어간다.

모듈 import

import pyautogui

코드를 작성하기 전 PyAutoGUI 라이브러리를 사용하기 위해서는 모듈은 import한다.

화면 크기 출력

print(pyautogui.size())

size() 함수는 현재 메인 모니터의 크기를 (width, height) 튜플의 형태로 반환한다.

pyautogui로 마우스 제어

PyAutoGUI의 다른 기능들은 크게 마우스와 키보드 조작 기능으로 나눌 수 있다.
하지만 우리는 오토마우스를 만들기 위함이기 때문에 마우스 조작 기능 위주로 공부할 것이다.
마우스 조작을 위해서는 좌표에 대한 이해가 필요하다.

아래 그림과 같이 (x, y) 위치는 화면 왼쪽 위가 (0, 0)이고 오른쪽으로 아래로 갈수록 x와 y가 증가하는 형태로 이해해보자.

현재 마우스 커서의 위치 출력

print(pyautogui.position())

position() 함수는 마우스 커서의 현재 위치를 (x, y) 튜플의 형태로 반환한다.

실시간으로 마우스 현재 위치 출력

print(pyautogui.mouseInfo())

마우스 현재 위치와 더불어 RGB 색상까지 실시간으로 얻을 수 있다.

마우스 이동

마우스를 이동시키는 방법에는 두가지가 존재한다.

# 절대 좌표로 이동
pyautogui.moveTo(100, 200)                 # x 100, y 200 위치로 바로 이동
pyautogui.moveTo(200, 200, duration=0.5)   # x 200, y 200 위치로 0.5초간 이동
pyautogui.moveTo(x=None, y=None, duration=0.0, tween=linear, pause=None, logScreenshot=False, _pause=True)


# 상대 좌표로 이동
pyautogui.move(100, 100, duration=1)    # 현재 위치 기준 100, 100만큼 1초간 이동
pyautogui.moveRel(100, 100) # 현재 위치에서 x 1000, y 100 만큼 이동
pyautogui.moveRel(xOffset=None, yOffset=None, duration=0.0, tween=linear, pause=None, logScreenshot=False, _pause=True)

위에서 언급한 영점을 기준으로 좌표를 찍어 이동하는 절대 이동과
현재 마우스 커서의 위치를 기준으로 지정한 만큼 이동하는 상대 이동방법이 있다.
옵션들은 다 같기 때문에 나중에 설명하도록 하겠다.
mac은 손쉬운 사용 권한을 허용해줘야지 마우스를 제어 할 수 있다.

기본 마우스 클릭

pyautogui.click()

click() 함수를 이용하면 마우스가 한 번 클릭한다.

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

위 코드랑 같은 기능을 하는 코드지만 무엇인가 많은 옵션이 달려있다.
이처럼 지금까지 배우고 배웠던 함수에는 다양한 옵션이 있기에 하나씩 살펴보도록 하겠다.

마우스 x, y 설정

pyautogui.click(200, 200) # x 200, y 200

moveTo() 와 click() 을 한 번에 실행할 수 있다.
간단하게 click() 에 x, y 위치를 넣어주면 된다.

button 설정

pyautogui.click(200, 200, button='right')

클릭할 마우스 버튼을 선택하려면 button 키워드를 사용해야 한다.
left, right, middle 을 설정할 수 있다.
button 옵션을 설정안하면 기본값이 left 이기 때문에 기본적으로 왼쪽 버튼으로 클릭한다.

interval 설정

# 200, 200 위치에서 2번 클릭하며, 클릭간의 시간은 0.2초
pyautogui.click(200, 200, clicks=2, interval=0.5)

clicks 키워드는 클릭 횟수를, interval 키워드는 클릭 사이의 시간 간격을 설정해준다.

tween 설정

# tween 변경
pyautogui.click(200, 200, tween=pyautogui.easeInQuad)

tween 키워드로 클릭하는 동안 발생하는 마우스 커서의 움직임을 제어할 수 있다.
accelerate, decelerate, easeInQuad, easeOutQuad, easeInOutQuad등을 설정할 수 있다.
기본값은 linear이다.

logScreenshot 설정

# 스크린샷 캡처 및 로그 저장
pyautogui.click(200, 200, logScreenshot='click_screenshot.png')

logScreenshot 키워드는 클릭 동작 직전에 스크린샷을 캡처하고 로그에 남길지 여부를 결정한다.
logScreenshot 매개변수에는 스크린샷을 저장할 파일 경로를 지정할 수도 있다.
기본값은 None이며, 스크린샷을 캡처하지 않는다.

_pause 설정

# 지연 없이 클릭
pyautogui.click(100, 100, _pause=False)

_pause 키워드는 클릭을 하기 전에 작은 지연을 추가하여 동작이 자연스럽게 보이도록 한다.
기본값은 True이며, 클릭 전에 약간의 지연을 발생시킨다.

다양한 마우스 클릭

# 두번 클릭
pyautogui.doubleClick()
pyautogui.doubleClick(x=None, y=None, interval=0.0, button=LEFT, duration=0.0, tween=linear, pause=None, logScreenshot=None, _pause=True)

# 3번 클릭
pyautogui.tripleClick()
tripleClick(x=None, y=None, interval=0.0, button=LEFT, duration=0.0, tween=linear, pause=None, logScreenshot=None, _pause=True)

clicks 키워드로 클릭 횟수를 지정해줄 수 있지만
간편하게 doubleClick() 을 이용해서 마우스를 더블 클릭하거나
tripleClick()을 이용해서 트리플 클릭을 할 수 있다.

leftClick(x=None, y=None, interval=0.0, duration=0.0, tween=linear, pause=None, logScreenshot=None, _pause=True)
rightClick(x=None, y=None, interval=0.0, duration=0.0, tween=linear, pause=None, logScreenshot=None, _pause=True)
middleClick(x=None, y=None, interval=0.0, duration=0.0, tween=linear, pause=None, logScreenshot=None, _pause=True)

또 간단하게 클릭할 마우스 버튼을 설정할 수도 있다.

마우스 드래그

#  x=300, y=300의 위치로 마우스 왼쪽 버튼을 클릭한 채로 드래그
pyautogui.dragTo(300, 300, button='left')

# 현재 커서 위치에서 x=400, y=400의 위치로 2초 동안 왼쪽 버튼을 누른 채로 드래그
pyautogui.dragTo(400, 400, 2, button='left')

# 현재 위치에서 x=30, y=0 만큼, 2초 동안 마우스 오른쪽 버튼을 누른 채로 드래그
pyautogui.dragRel(30, 0, 2, button='right')

dragTo() 를 사용해서 마우스 드래그 할 수 있다.
기본적인 사용법은 click 함수와 거의 같고
좌표와 세 번째 인수(duration)로 값을 넣어주면 드래그하는 시간도 설정할 수 있다.
dragRel() 을 이용해 상대적 드래그를 할 수 있다.

마우스 스크롤

pyautogui.scroll(-100) 
pyautogui.scroll(100) 

scroll() 로 마우스 휠을 조작해서 페이지의 스크롤을 내리고 올릴 수 있다.
양수이면 위, 음수이면 아래로 움직인다.

Next

이로써 PyAutoGUI로 마우스 다루는 법을 알아보았다.
다음엔 실습으로 오토마우스를 만들어 보자.

0개의 댓글