2025. 1. 30. 18:32ㆍIT
마우스가 자동으로 움직이고 자동으로 키보드 입력을 해 줄 수 있는 프로그램을 만들면 재미있을 것 같다는 생각을 해 본 사람은 참 많을 것이다. 기초적인 부분은 정말 어렵지는 않다. 파이썬만 있으면 그런 것 쯤이야 누워서 떡 먹기다. 하지만 범용적으로 모든 사람의 컴퓨터에서 동작하는 그런 프로그램을 만들기는 쉽지 않다. 너무나 변수가 많기 때문이다. 하지만 내 컴퓨터에서 내가 원하는 동작을 만들어 보는 것은 재미있게 해 볼 수 있다. 이번 챕터에서 사용해 볼 패키지는 pyautogui인데 먼저 설치를 하고 나서 간단한 프로그램 몇 개를 만들어보도록 하자.
pip install pyautogui
먼저 만들어볼 프로그램은 터미널에 마우스의 좌표를 출력해 주는 프로그램입니다. 이미지를 보여주는 알씨라는 프로그램을 보면 우측 하단에 마우스의 좌표를 출력해 주고 있습니다. x, y 좌표를 각각 출력해 줍니다. 화면 전체의 좌표가 아니고 이미지의 좌표가 되겠죠. 또한 포토샵 같은 프로그램에서도 마우스 좌표를 보여줍니다. 다음의 간단한 프로그램이 바로 마우스 좌표를 터미널에 뿌려주는 프로그램입니다. 프로그램 코드는 간단해 보이지 않나요? 처음엔 pyautogui.size()를 출력하고 있는데요. 여기서 사이즈는 화면의 크기입니다. 우리가 알고 있는 해상도(resolution)과 같은 값을 출력하게 됩니다. while문은 기억을 하시나요? 괄호 안에 있는 값이 True일 경우에 반복하는 반복문입니다. 여기서는 while(True)이므로 무한 반복되는 프로그램입니다. 끝을 내기 위해서는 파이참에서 stop 버튼을 사용해서 멈출 수 있습니다. 마우스의 좌표는 pyautgui의 postion() 함수를 사용하면 됩니다. 여기서 x와 y를 따로 구분해서 출력할 필요가 있다면 주석문에 있는 대로 pyautogui.postion().x 또는 pyautogui.potion().y와 같이 사용할 수 있습니다.
여기서 우리가 처음보는 time.sleep(0.1)이라는 함수가 보입니다. 함수 이름처럼 우리의 프로그램을 잠재우는 것입니다. sleep() 함수의 매개변수의 단위는 초(sec)입니다. 여기에 있는 time.sleep(0.1)을 만나면 동작을 멈추고 0.1초 동안 아무런 동작을 하지 말고 기다리라는 의미입니다. while 반복문 안에서 print() 함수만 있을 경우 쉬지도 않고 화면에 출력을 하기 때문에 0.1초마다 print() 함수를 반복하라는 의미입니다.
018_mouseKeyboard.py
프로그램을 실행하자마자 Point(x=1234, y=234)와 같은 내용이 쉴새 없이 프린트 됩니다. 정확히는 0.1초마다 pyautogui가 마우스의 좌표를 출력하는 것이죠.
그럼 이 프로그램으로 무엇을 할 수 있을까요?
컴퓨터 화면에 있는 버튼이나 입력 위치의 좌표를 알 수 있겠네요. 거기에 pyautogui는 마우스의 좌표를 가지고 오는 것 뿐만 아니라 마우스의 위치를 옮기고 클릭, 더블 클릭을 할 수 있습니다. 문자를 출력해 넣을 수도 있습니다. 이런 기능이 있다면 우리가 할 수 있는 기능들이 더 많아지겠네요. 프로그램을 실행시키고 특정 동작도 시켜 볼 수 있을 것 같습니다.
우리가 만든 프로그램으로좌표를 찾아서 저장해 둘 수 있을 것 같습니다. 먼저 윈도우의 좌측하단에 “찾기”의 좌표를 찾아봅니다. 제 경우 찾기의 위치는 대략 255, 1757입니다. 마우스 커서를 이동할 때는 moveTo()함수를 사용합니다. 따라서 마우스를 이동하려면 pyautogui.moveTo(255, 1757) 입니다. 그런데 이동을 해서 클릭을 해야 하니 click() 함수를 이용합니다. pyautogui.click()을 그대로 호출해 주면 됩니다. 이 두가지를 하나로 표현하면 pyautogui.click(255,1757) 입니다. PowerPoint라고 검색창에 타이핑을 하고 싶습니다. 이럴 경우에는 pyautogui.typewrite(‘PowerPoint’, interval=0.1)과 같이 사용할 예정입니다. PowerPoint를 입력하는데 각 키보드를 누를 때의 인터벌을 0.1초 두라는 의미입니다. 마지막으로 엔터를 쳐야겠죠? pyautogui.press(‘enter’)와 같이 press() 함수를 호출해 주면 됩니다. keyboard와 관련된 변수는 pyautogui.KEYBOARD_KEYS를 출력해 보면 알 수 있다고 합니다.
019_mouseKeyboard2.py
글로 설명드린 내용을 그대로 코딩을 했습니다. import 할 때, pyautogui나 time을 모두 입력하는 대신 짧게 사용하기 위해서 as절을 사용한 것이 기존과 약간 다른 점입니다. 다음은 sleep을 써서 동작간에 잠깐씩 쉬는 시간을 주었습니다. 여러분 컴퓨터에 파워포인트가 설치되어 있다면 파워포인트가 실행이 됩니다. 이와 같이 간단하게 프로그램 실행을 자동화 할 수 있습니다.
사무실에서 동료들과 다음과 같은 얘기를 했던 것이 기억이 납니다.
어느 회사에서 재택 근무를 하는데 회사에서 직원들이 컴퓨터를 떠나지 않고 일을 하는지 확인하는 다음과 같은 방법을 썼다고 합니다. 요즘은 컴퓨터를 이용해서 하는 일의 거의 전부이다보니 마우스나 키보드의 입력이 몇 분 동안 없으면 경고가 뜨도록 되어 있었다고 합니다. 잠시 딴짓을 하기 위해서 혹은 몇 분 동안 입력이 없으면 경고가 뜬다는 강박감을 없애기 위해서 회전하는 선풍기에 마우스를 연결해서 자동으로 움직이게 했었다고 합니다. 유튜브에서 본 것 같기도 합니다.
만일 이런 것이 필요하다면 우리는 더이상 무식한 방법을 사용할 필요 없이 간단하게 프로그램을 만들어 무한 반복하도록 하면 되지 않을까요?
020_mouseKeyboard3.py
max_x 좌표와 max_y를 구하는 방식은 size() 함수에 width 또는 height 변수를 접근해서 얻어올 수 있습니다. 그리고 새롭게 random이라는 패키지를 import 했는데 이는 임의의 숫자를 만들 수 있는 것입니다. random 패키지에서 randint() 함수는 두 개의 매개 변수를 갖는데 첫번째 숫자와 두번째 숫자 사이에서 임의의 숫자를 생서해서 반환합니다. 따라서 매번 호출을 할 때마다 x와 y의 값이 변경이 되어집니다. 변경 된 값으로 moveTo() 함수를 이용해서 마우스를 이동시키고 sleep() 함수를 이용해서 5초를 쉽니다. 여기서 시간을 너무 짧게 두면 프로그램을 종료시키기 어렵습니다.
'IT' 카테고리의 다른 글
파이썬 - pip (0) | 2025.01.31 |
---|---|
파이썬 - 화면 캡춰하기 (0) | 2025.01.30 |
파이썬 프로젝트 - Google News (0) | 2025.01.30 |
파이썬 - 웹 크롤링 (0) | 2025.01.30 |
깃헙 - GitHub (0) | 2025.01.30 |