자동 조작이라고 했지만 실제로는 마우스를 프로그래밍한다는 말이 더 어울릴 것 이다.

 

마우스를 사용하지 못하는 사람은 PC를 아예 안쓰는 사람일 것이다.

 

어찌보면 현재의 컴퓨팅 환경은 스티브 잡스의 애플컴퓨터로 부터 마우스를 벗어나지 못했다. 84년에 마우스 디자인을 채택했으니까 어찌보면 근 40년 가까이 GUI 환경은 그대로 인 것이다.

 

스마트폰에서 터치방식을 도입한지는 얼마 되지 않았지만 마우스가 할 일을 손가락이 한다는 부분만 다를 뿐 x,y 좌표를 오고간다는 근본 원리는 같다. 근래에 가장 기대가 되는 것은 VR, AR GUI 분야다. 어쩌면 더이상 키보드를 치지 않아도 터치스크린이 없이도 원하는 작업을 하고 엔터테인먼트를 즐길 수 있지 않을까 기대를 하고 있다. 또한 생각이나 눈의 움직임 만으로 조작이 되는 컴퓨팅 세계가 멀지 않았다는 생각이 든다.

실제 뇌신경 전달 기기를 착용하면 어느정도는 구동이 된다.

 

아래 뇌를 사용한 마인크래프트는 하나의 예이다. 뇌파로 조종하는 컴퓨터! 그야말로 미래의 GUI라 할 만하다.

https://www.youtube.com/watch?v=cbUwqMNtxiQ

 

 

어쩌면 자동화 기술은 그 다음 단계이다. 사람이 뇌를 사용하여 GUI를 실제 조작할 필요조차 없다. 필요한 것은 미리 완성한 스크립트일 뿐이다. 타이머를 사용하면 심지어 클릭할 필요조차 없다. 엄청난 매력이다!

 

파이썬의 pysutogui 도 일종의 매크로 개념으로 받아들이면 된다.

 

 

매크로 (컴퓨터 과학) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

기본적으로 매크로는 책상에 앉아서 반복하는 모든 일에 사용할 수 있다. 그러니까 쳇바퀴같은 일상을 보내는 사람에게 필요한 기술이다. 한번만 발생하는 작업에 매크로를 사용하는 것은 비효율적이다. 그리고 정교하게 만들수록 가치는 늘어난다.

 

아마 모르는 사람에겐 인공지능 처럼 보일 것이다. 하기사 인공지능이 발전한들 사람에게 도음이 안되고 의미가 없으면 아무 소용이 없다. 자동화 기술은 인공지능만이 할 수 있는게 아니다.

 

파이썬의 모듈들은 개별적인 작업보다 두세개의 모듈을 섞어서 사용할 때 진정한 파워를 발휘하기 시작한다. 거기다 파워셸 스크립트나 배치 스크립트를 사용하면 마치 OS 수준에서 자동 조작하는 것도 가능하다. 개발 시간은 늘어나겠지만...

 

 

그래서 모듈이 많이 있는 것이다. 관련된 여러개 모듈을 조합한 프로그래밍을 하고 실제 테스트를 통해 오류를 줄여야 한다. 마우스를 프로그램에서 컨트롤하는 만큼 변수가 많다. 파이썬 프로그램은 그 안에서 오류 컨트롤을 할 수 있지만 다른 프로그램을 조작하는 것은 다른 차원의 문제이다. 다른 프로세스의 자료구조나 예외 상황에 대응 할수는 없다. 매크로의 실행에 대한 관리와 모니터링은 인간이 해야할 것이다. 인간이 할일을 얼마나 덜어주는지도 평가해야 한다.

 

마우스 코딩 기술은 여러모로 도움이 될 것이다. 

 

예제> pyautogui 기초 정보 가져오기

 

pip install pyautogui 로 설치한다. 몇가지 모듈이 설치될 것이다.

 

 

import pyautogui

width, height = pyautogui.size()
print('width: ', width)
print('height: ',height)
print(pyautogui.position())

for i in range(3):
    pyautogui.moveTo(100,100,duration=0.25)
    pyautogui.moveTo(200,200,duration=0.25)
    pyautogui.moveTo(300,300,duration=0.25)

 

pyautogui 를 import 한다.

 

화면의 기본 정보를 가져온다. 아래와 같이 모니터의 크기를 가져온다.

 

position() 메서드는 현재 마우스 위치를 리턴한다.

 

moveTo 메서드는 지정한 좌표로 마우스를 이동시킨다.

 

for 루프로 3회 대각선으로 이동시키는 코드이다. duration 은 각각 위치에 마우스가 머무는 시간이다. 대기시간이 없으면 너무 빨리 지나가서 눈으로 확인이 안될 것이다. 0.25 초단위니까 0.1, 1초 등 상황에 맞게 설정하면 된다.

 

 

예제> 마우스 위치 트래킹하기

 

아래 예제에서 마우스 위치를 트랙킹한다. 원리는 position 을 무한루프로 보여주면 되는데, 그냥 출력만하면 콘솔창이 지저분해지니까 양식을 좀 넣었다. 

 

time 모듈로 시간을 지연시키지 않으면 CPU의 자원이 낭비될 것이다. 0.1초에 한번씩만 출력시켜도 충분하다.

 

맨 윗줄에서 표시하기 위해 한번 출력하고 백스페이스로 지우고 다시 출력하는 것을 반복한다.

 

그러면 숫자만 바뀌는 것 처럼 보인다.

import pyautogui
import time

print('Press Ctrl-C to quit')

try:
    while True:
        x,y = pyautogui.position()
        positionGui = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionGui, end='')
        time.sleep(0.10)
        print('\b'*len(positionGui),end='',flush=True)

except KeyboardInterrupt:
    print('\n')

 

예제> 마우스 위치와 픽셀 RGB값 트랙킹하기

 

커서의 위치를 트랙킹할 수 있다면 이제 그 위치에 있는 픽셀의 RGB 값도 추출해낼 수 있다. screenshot 의 픽셀을 조사함으로써 알 수 있다. getpixel 메서드에서 지원한다.

print('Press Ctrl-C to quit')
positionGui =''
try:
    while True:
        time.sleep(0.1)
        x,y = pyautogui.position()
        print('\b' * len(positionGui), end='', flush=True)
        pixelRGB = pyautogui.screenshot().getpixel((x,y))
        positionGui = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        positionGui += ' RGB: (' +str(pixelRGB[0]).rjust(3) +\
                       ', ' +str(pixelRGB[1]).rjust(3) +\
                       ', ' +str(pixelRGB[2]).rjust(3) + ')'
        print(positionGui, end='')

except KeyboardInterrupt:
    print('\n')

커서의 RGB 값만 문자열에 추가했다.

 

그래픽 프로그램의 스포이드 기능도 같은 원리이다. 이미지에 커서를 놓으면 RGB 값이 추출된다. RGB 값을 알아냈으니 제어문으로 특정 색상의 영역에서 메서드를 발생시킬 수 있다.

 

 

예제> 자동으로 그림그리기. (square spiral image) 사각 스파이럴

 

파이썬 터틀에서 했던 것 처럼 스파이럴을 그릴 수 있다. 사각 스파이럴은 위에서 본 피라미드 처럼 생겼다

 

dragRel 메소드로 그릴 수 있다. drag라는게 그림그릴 때 선을 긋는 것과 같은 동작이다. click 메서드는 키를 눌렀다가 DOWN 손을 떼는 동작이다  UP. drag는 DOWN 누른 후 이동 MOVE 후 UP 되는 동작이라는 개념을 가지고 순서에 따라 코딩을 한다.

import pyautogui
import time

time.sleep(3)
pyautogui.click()
distance = 300
pyautogui.scroll(distance)

while distance > 0:
    pyautogui.dragRel(distance,0,duration=0.1)
    print(distance)
    distance -= 10
    pyautogui.dragRel(0,distance,duration=0.1)
    print(distance)
    pyautogui.dragRel(-distance,0,duration=0.1)
    print(distance)
    distance -= 10
    pyautogui.dragRel(0,-distance,duration=0.1)

빠른 학습을 위해 리드더독스 웹문서를 잘 활용하길 바란다.

 

https://pyautogui.readthedocs.io/en/latest/

 

Welcome to PyAutoGUI’s documentation! — PyAutoGUI documentation

Welcome to PyAutoGUI’s documentation! PyAutoGUI lets your Python scripts control the mouse and keyboard to automate interactions with other applications. The API is designed to be as simple. PyAutoGUI works on Windows, macOS, and Linux, and runs on Pytho

pyautogui.readthedocs.io

 

공유하기

facebook twitter kakaoTalk kakaostory naver band