파이썬 마우스 자동화 pynput

pynput(파이엔풋)은 pyautogui 와 같은

파이썬의 입력 자동화 모듈입니다.

 

마우스도 컨트롤 할 수 있고

키보드도 컨트롤 할 수 있습니다.

 

이 포스팅에서는 pynput 으로 마우스를 조작해보겠습니다.

 

일단 기본 조작부터 보겠습니다.

 

from pynput.mouse import Button, Controller
import time

# 마우스 콘트롤러 객체
mouse = Controller()

print('현재 마우스 포지션: {0}'.format(mouse.position))
# 마우스 포지션 이동
mouse.position = (500, 250)

print('바뀐 마우스 포지션: {0}'.format(mouse.position))

# 마우스 눌렀다 뗀다
mouse.press(Button.left)
mouse.release(Button.left)
time.sleep(1)

# 마우스 포지션 이동
mouse.move(100, -100)
print('바뀐 마우스 포지션: {0}'.format(mouse.position))

# 더블 클릭한다
mouse.click(Button.left, 2)
현재 마우스 포지션: (757, 768)
바뀐 마우스 포지션: (500, 250)
바뀐 마우스 포지션: (600, 150)

 

pynput.mouse.Button

pynput.mouse.Controller

 

마우스 버튼과 콘트롤러를 가져옵니다.

from 에서 import 를 하는 이유는 이름이 길기 때문이죠.

 

Button 은 enum 타입입니다.

왼쪽, 오른쪽 등 버튼의 위치를 지정하기 위해 사용합니다.

 

Controller 에서 인스턴스를 얻어서

메소드로 키보드를 조작하고 있습니다.

 

position 값만 바꿔도 마우스가 이동한다는 사실을 알 수 있습니다.

 

프로그램의 실행중에는 Controller의 인스턴스와

운영체제의 마우스는 연결되어 있는 것 입니다.

 

여기까지가 기본 조작입니다.

 

pynput 이벤트리스너(스레드)

마우스 이벤트리스너는 마우스 조작이 발생했을 때

진행할 행동을 예약합니다.

 

from pynput import mouse

def on_move1(x, y):
    print('\r좌표 이동 {0}'.format((x, y)), end='')

def on_click(x, y, button, pressed):
    print('\r{0} {1}'.format(
        '클릭 위치' if pressed else '뗀  위치',
        (x, y)), end='')
    if not pressed:
        return False

def scroll(x, y, dx, dy):
    print('\r스크롤 {0} {1}'.format(
        '아래로' if dy < 0 else '위로',
        (x, y)), end=''
    )

with mouse.Listener(
    on_move=on_move1,
    on_click=on_click,
    on_scroll=scroll
) as listner:
    listner.join()

listner = mouse.Listener(
    on_move=on_move1,
    on_click=on_click,
    on_scroll=scroll
)
listner.start()

pynput 의 공식 문서에는 Listener 를 사용하라고 가이드합니다.

 

Listener 는 threading.Thread 의 인스턴스로

위 예제에서는 세가지 이벤트인

마우스 이동, 클릭, 스크롤에 대하여 처리기를 등록합니다.

 

def 로 함수를 만들고 Listenter 에 등록하기만 하면 됩니다.

 

루프를 돌기 때문에

프로그램의 종료가 있어야 하는데

on_click 이벤트에서 return False 시 전체를 종료합니다.

 

pynput 공식 문서는 아래 링크입니다.

기본적 가이드가 나와있으니

좀 더 복잡한 프로그램을 만들기 위해서

참고하면 좋을 것 같습니다.

 

pynput · PyPI

 

pynput

Monitor and control user input devices

pypi.org

동기화 방식 이벤트 처리기

 

비동기식 스레드 방식의 이벤트 처리기와 별도로

동기화 방식의 이벤트 처리 방법도 있습니다.

 

이쪽은 GUI 프로그램의 메인루프나 게임루프와 비슷합니다.

좀더 이해하기 쉽고 오류를 다루기에도 편리합니다.

from pynput import mouse

count = 0

def endTheProgram():
    print("\n프로그램 종료")

# 동기화 방식의 이벤트 리스닝 처리기
with mouse.Events() as events:
    for event in events:
        count = count + 1
        if hasattr(event, 'button'):
            if event.button == mouse.Button.right:
                endTheProgram()
                break
            if event.button == mouse.Button.left:
                if event.pressed == True:
                    print("\r마우스 왼쪽 버튼 눌림", end='')
                else:
                    print("\r마우스 왼쪽 버튼 풀림", end='')
        else:
            print('\r' + str(count) + ': mouse 이벤트 발생 {}'.format(event), end='')

 

중요한 것은 세부적인 프로그래밍을 해나갈 수 있는 능력입니다.

 

스레드를 사용하려면 mouse.Listener 를

이벤트 처리기를 사용하려면 mouse.Events 를 사용하면 됩니다.

 

pynput은 두 가지에 대한 옵션을 제공하고 있습니다.

 

pynput의 마우스 모듈을 키보드와 함께 사용하면

여러가지 자동화 프로그램을 만들 수 있을 겁니다.

 

자동화 프로그램은 그냥 콘솔에서 사용해도 좋고

tkinter 등 GUI와 함께 사용하면 배포하기 쉽습니다.

 

 

mouse의 기본조작은 여기까지 하고 keyboard의 control은 다음 포스트에서 이어가겠습니다.

 

비슷한 기능은 이전에 다룬 pyautogui 모듈에 있는데

입력프로그램의 경우 성능 차이가 두드러지지 않기 때문에

대강 자신에게 맞는 모듈을 사용하시길 바랍니다.

 

자동화 프로그램의 장점은 굳이 이야기할 필요는 없겠죠.

클릭만 자동으로 해줘도 일은 줄어듭니다.

 

파이썬 | 마우스 자동 조작 하기 | GUI 조작 프로그래밍 | pyautogui 모듈 | 매크로

 

파이썬 | 마우스 자동 조작 하기 | GUI 조작 프로그래밍 | pyautogui 모듈 | 매크로

자동 조작이라고 했지만 실제로는 마우스를 프로그래밍한다는 말이 더 어울릴 것 이다. 마우스를 사용하지 못하는 사람은 PC를 아예 안쓰는 사람일 것이다. 어찌보면 현재의 컴퓨팅 환경은 스티

digiconfactory.tistory.com

파이썬 | 자동 키보드 프로그래밍 | pyautogui 모듈

 

파이썬 | 자동 키보드 프로그래밍 | pyautogui 모듈

자동 키보드 프로그래밍은 마우스에 비해서는 단순하다. 키보드 입력값은 그저 1차원적인 입력의 배열이다. 배열의 측면에서 보면 키보드는 1차원 문자열의 연속이고 마우스는 2차원 평면좌표

digiconfactory.tistory.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band