본문 바로가기
컴퓨터 활용

파이썬으로 마우스와 키보드 자동화하기

by easyfly 2022. 10. 3.
반응형

파이썬으로 마우스와 키보드 자동화하기

컴퓨터가 잘하는 일.

단순 반복.

사람이 싫어하는 일.

단순 반복.

그렇습니다. 단순 반복을 컴퓨터에게 맡기면 군소리 없이 해치웁니다. 매크로를 이용하여 단순하고 반복되는 일을 시킬 수도 있으나, '파이썬'으로 프로그램을 해서 일을 시키면 효율적이지 싶습니다. 다음은 메모장에 간단한 문장을 적어 출력하는 것을 자동화한 것입니다.

키보드 자동화하기

키보드 자동화를 통한 문자 입력

프로그램 내용은 이렇습니다. 사용하는 플랫폼이 무엇인가를 먼저 알아내는 일을 합니다. 조건문을 줘서 OS 이름을 얻습니다. 반환 값이 'Windows'이면 메모장을 엽니다. subprocess.Popen()는 자식 프로세스를 실행하는 함수로, 여기에 메모장 실행 파일의 경로를 인수로 전달하면 프로그램이 실행됩니다. 메모장이 실행된 뒤에는 2초간 대기합니다. pa.write() 함수로 영문은 바로 입력이 됩니다. 한글은 입력이 되지 않습니다. 한글은 pyperclip 모듈을 사용해 내용을 복사(pyperclip.copy())합니다. 복사한 내용을 pa.hotkey('ctrl', 'v')를 사용해 붙여 넣기를 합니다. 단축키 '붙여 넣기'가 'Ctrl+V' 거든요.

키보드 자동화 함수

다음은 PyAutoGUI 의 키보드 조작 함수입니다.

  • pa.write(문자열): 문자열 입력(한글은 입력되지 않음)
  • pa.press(키): 키 입력
  • pa.keyDown(키): 키를 누른 상태로 유지하기
  • pa.keyUp(키): 누른 상태의 키를 떼기
  • pa.hotkey(키1, 키2, 키3...): 키 조합 입력하기

마우스 자동화하기

마우스 자동화를 통한 그림판에 그리기

subprocess.Popen()을 사용해서 그림판을 엽니다. 그림판이 활성화되면 단축키를 입력해서 창을 최대화합니다. Alt + Space는 그림판의 파일 메뉴를 열고 0.25초 후에 'X' 키를 통해 창을 최대화합니다. 만약 페인트 툴이 열리지 않았을 경우를 대비해 예외를 둬서 문제 사태에 대비합니다. 대화 상자가 닫히면 10초간 대기하도록 합니다.

그림을 시작할 좌표를 bx, by에 지정하고 사각형의 폭을 val에 지정합니다. 페인트 툴에 따라 캔버스의 시작 위치가 다르고 PC의 해상도가 너무 작거나 크면 적합한 위치가 다를 수 있습니다.

이어서 마우스 조작을 수행합니다. pa.moveTo() gkatnfh akdntmfmf (bx, by)의 좌표로 이동합니다. pa.dragTo()와 pa.drag() 함수는 마우스 버튼을 누른 채로 지정한 좌표로 이동합니다. 둘의 차이점은 pa.dragTo()는 절대 좌표를, pa.drag()는 상대 좌표를 인수로 받는다는 점입니다. button 인수는 어떤 마우스 버튼으로 드래그할지 지정합니다. 위의 경우는 마우스 왼쪽 버튼을 누른 채로 드래그한다는 의미입니다.

for 문을 이용해서 정사각형을 그립니다.

마우스 자동화 함수

다음은 PyAutoGUI의 마우스 조작 함수를 정리한 것입니다.

  • pa.size(): 화면 사이즈를 구해 튜플로 반환
  • pa.position(): 마우스 커서의 현재 위치를 튜플로 반환
  • pa.moveTo(x, y): 마우스 커서의 좌표를 (x, y)로 이동(절대 좌표)
  • pa.move(x, y): 현재 좌표에서 (x, y) 픽셀만큼 이동(상대 좌표)
  • pa.dragTo(x, y, sec, button='left'): 좌표 (x, y)까지 sec초 동안 드래그
  • pa.drag(x, y, sec, button='left'): 현재 좌표에서 (x, y) 픽셀만큼 sec초 동안 드래그
  • pa.click(): 현재 위치에서 클릭
  • pa.click(x=X, y=Y): 좌표 (X, Y)를 클릭
  • pa.click(button='right'): 마우스 오른쪽 버튼 클릭
  • pa.click(clicks=2): 더블 클릭
  • pa.doubleClick(): 더블 클릭
  • pa.mouseDown(): 마우스 버튼 누르기
  • pa.mouseUp(): 마우스 버튼 떼기
  • pa.scroll(N): N만큼 수직 방향으로 스크롤
  • pa.hscroll(N): N만큼 수평 방향으로 스크롤
반응형

댓글