본문 바로가기
프로그래밍/Python

[Python] 파이썬 마우스 제어하는 방법 (PyAutoGUI 라이브러리 이용)

by _BlankSpace 2019. 6. 23.

어느 프로그래밍 언어든 장치 제어 방법은 존재하는데, 이번 포스팅에서는 파이썬에서 마우스를 제어할 수 있는 방법을 포스팅하려고 합니다.

 

물론, 저수준 단위부터 마우스를 제어하는 것은 아니고, PyAutoGUI 라는 라이브러리를 이용하여 제어하려고 합니다.

 

PyAutoGUI 라이브러리는 마우스부터 시작해서 키보드와 메시지 박스, 스크린샷 기능까지 제공하고 있습니다. 때문에 이 라이브러리 하나면 대부분의 디바이스 제어를 커버할 수 있지 않을까 싶습니다.

 

그 중, 이번 포스팅에서는 PyAutoGUI를 이용한 마우스 제어를 정리하겠습니다.

키보드 및 메시지 박스와 스크린샷 기능에 대한 글은 아래 링크를 참고해주세요.

[Python] 파이썬 키보드 제어하는 방법 (PyAutoGUI 라이브러리 이용)

[Python] 파이썬 메시지 박스 및 스크린샷하는 방법 (PyAutoGUI 라이브러리 이용)

 

0. 들어가기 전에...

먼저, 관련 라이브러리 내용을 정리하기 전에 저의 환경부터 정리하도록 할께요.

 

OS : Windows7

파이썬 버전 : Python 3.7.3

 

그리고, PyAutoGUI 라이브러리를 설치해야겠죠? Python이 설치된 곳에서 pip가 설치되어 있을텐데요. pip를 이용하여 설치합니다.

명령어는 아래와 같습니다.

 

pip install pyautogui

 

설치는 모두 끝났으므로, 이제 라이브러리 관련 함수에 대해 설명하도록 하겠습니다.

 

1. PyAutoGUI의 기본적인 함수.

PyAutoGUI 라이브러리에서는 기본 공통 함수를 제공합니다. 예제와 함께 바로 설명하도록 할께요.

 

size() - 현재 사용하고 있는 모니터의 사이즈를 반환합니다. (width, height)로 반환하므로, 순서대로 가로, 세로라고 생각하면 될 것 같습니다.

import pyautogui
screenWidth, screenHeight = pyautogui.size()
print('{0}, {1}'.format(screenWidth, screenHeight))

 

position() - 현재 마우스의 위치를 반환합니다. (x, y)로 반환하므로, 순서대로 x축, y축이라고 생각하면 되겠습니다.

import pyautogui
currentMouseX, currentMouseY = pyautogui.position()
print('{0}, {1}'.format(currentMouseX, currentMouseY))

onScreen(x, y) - x, y 좌표가 스크린 안에 위치해 있는 지를 확인합니다. 위치해 있으면 True를 반환하고, 위치 하지 않는다면 False를 반환합니다.

import pyautogui
print(pyautogui.onScreen(1920, 1080)) # False
print(pyautogui.onScreen(1919, 1079)) # True

 

기본적인 함수 설명이 끝났으므로, 이제 마우스 제어를 할 수 있는 함수에 대해서 설명하도록 하겠습니다.

 

 

2. 마우스 제어를 해보자.

마우스 제어에는 움직이고, 드래깅하고, 클릭하는 등의 여러 행동이 있기 때문에 행동으로 나누어서 설명을 진행하도록 하겠습니다.

 

마우스 움직이기


moveTo(x, y, duration) - x, y 좌표 기준으로 마우스를 움직입니다. 말 그대로 x, y 좌표로 마우스 커서를 duration 동안 이동시킵니다. 더 많은 인자에 대한 내용은 라이브러리 문서를 참고해주세요.

import pyautogui
pyautogui.moveTo(50, 50) # 마우스를 (50, 50) 위치로 이동시킵니다.
pyautogui.moveTo(30, None, 1) # 마우스의 x좌표가 30으로 1초 동안 이동하도록 움직입니다. (y는 현재위치)
pyautogui.moveTo(None, 30) # 마우스의 y좌표가 30으로 이동하도록 움직입니다. (x는 현재위치)

 

move(x, y, duration) - 현재 기준으로 x, y 좌표만큼 마우스를 duration 동안 움직입니다. 더 많은 인자에 대한 내용은 라이브러리 문서를 참고해주세요.

import pyautogui
pyautogui.moveTo(50, 50) # 마우스를 (50, 50) 위치로 이동시킵니다.
pyautogui.move(0, 100) # 마우스의 현재 위치에서 y 좌표로 100 이동시킵니다.
pyautogui.move(100, 0) # 마우스의 현재 위치에서 x 좌표로 100 이동시킵니다.
pyautogui.move(100, 100, 3) # 마우스의 현재 위치에서 x, y 좌표로 100 3초 간 이동시킵니다.

 

마우스 드래그하기


dragTo(x, y, duration, button) - x, y 좌표 기준으로 마우스를 button을 누른 상태로 duration 동안 움직입니다. duration 은 설정하지 않아도 상관 없습니다. button은 right, left, middle 버튼을 선택할 수 있습니다.

import pyautogui
pyautogui.dragTo(300, 300, button='left') # (300, 300) 위치를 left 버튼을 누른 채로 움직입니다.
pyautogui.dragTo(500, 500, 3, button='right') # (500, 500) 위치를 right 버튼을 누른 채로 3초 동안 움직입니다.
pyautogui.dragTo(100, 100, 3, button='middle') # (100, 100) 위치를 middle 버튼을 누른 채로 3초 동안 움직입니다.

 

drag(x, y, duration, button) - 현재 위치를 기준으로 x, y좌표 만큼 마우스 button을 누른 상태로 duration 동안 움직입니다. duration은 설정할 필요는 없고, button은 right, left, middle 버튼을 선택할 수 있습니다.

import pyautogui
pyautogui.drag(300, 300, button='left') # 현재 위치 기준으로 (300, 300) 위치를 left 버튼을 누른 채로 움직입니다.
pyautogui.drag(500, 500, 3, button='right') # 현재 위치 기준으로 (500, 500) 위치를 right 버튼을 누른 채로 3초 동안 움직입니다.

 

move, moveTo, drag, dragTo에 인자를 추가하면 커서의 움직임도 제어할 수 있습니다.

몇 가지만 소개하자면.. 다음과 같습니다.

pyautogui.easeInQuad - 커서의 시작은 느리고 끝은 빠르게 움직입니다.

pyautogui.easeOutQuad - 커서의 시작은 빠르고 끝은 느리게 움직입니다.

pyautogui.easeInOutQuad - 커서의 시작과 끝은 빠르고 중간은 느리게 움직입니다.

pyautogui.easeInBounce - 커서를 반동을 주면서 움직입니다.

이외에도 여러 인자가 있기 때문에 자세한 내용은 직접 확인하시면 좋을 것 같습니다.

import pyautogui
pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad) # 커서의 시작은 느리고 끝은 빠르게 움직인다.
pyautogui.moveTo(200, 200, 2, pyautogui.easeOutQuad) # 커서의 시작은 빠르고 끝은 느리게 움직인다.
pyautogui.moveTo(200, 100, 2, pyautogui.easeInOutQuad) # 커서의 시작과 끝은 빠르고 중간은 느리게 움직인다.
pyautogui.moveTo(100, 200, 2, pyautogui.easeInBounce) # 커서를 반동을 주면서 움직인다.

 

마우스 클릭하기


click(x, y, button, clicks, interval) - (x, y) 위치로 button을 누릅니다. 이때, interval로 설정한 기간동안 clicks 만큼 마우스를 누릅니다. 자세한 내용은 아래 예제를 확인해주세요.

import pyautogui
pyautogui.click() # 현재 마우스 커서 위치에서 클릭한다. (기본 클릭 = Left)
pyautogui.click(x=200, y=200) # (x, y) 위치로 마우스를 이동한 후에 클릭한다. (기본 클릭 = Left)
pyautogui.click(x=100, y=100, button='right') # (x, y) 위치로 마우스를 이동한 후에 right 클릭한다. 
pyautogui.click(x=50, y=50, button='right', clicks=2, interval=1) # (x, y) 위치로 마우스를 이동한 후, right 버튼을 1초마다 2번 클릭한다.

 

이외에도 doubleClick(), tripleClick() 함수도 있습니다. 기능은 기본적으로 두번 클릭, 세번 클릭이고 동작은 같으니, 이러한 함수가 있다고 생각만 하시면 좋을 것 같습니다.

 

마우스 버튼 누르기, 떼기


mouseDown(x, y, button) - (x, y) 위치로 마우스 버튼을 누릅니다.

mouseUp(x, y, button) - (x, y) 위치로 마우스 버튼을 뗍니다.

import pyautogui
pyautogui.mouseDown() # 현재 위치에서 마우스 왼쪽 버튼을 누른다.
pyautogui.mouseDown(button='right') # 현재 위치에서 마우스 오른쪽 버튼을 누른다.
pyautogui.mouseUp(x=100, y=100, button='right') # (x, y) 위치로 마우스 오른쪽 버튼을 뗀다.

 

마우스 스크롤 하기


scroll(click, x, y) - x, y 위치만큼 이동한 후에, click 수만큼 스크롤 이동을 합니다. (x, y는 생략 가능합니다.)

import pyautogui
pyautogui.scroll(20) # 20 번 스크롤을 위로 올립니다.
pyautogui.scroll(-20) # 20 번 스크롤을 아래로 내립니다.
pyautogui.scroll(10, x=200, y=300) # (x, y) 만큼 마우스를 이동한 후에 스크롤을 10번 위로 올립니다.

 

이상으로 PyAutoGUI를 이용하여 파이썬에서 마우스를 제어하는 방법에 대한 정리를 마치겠습니다. 잘못된 내용이 있다면 댓글 남겨주세요!

댓글