공작소굴

이번 포스트에서는 pyautogui 라이브러리로 마우스와 키보드를 자동으로 제어하여 웹사이트에 접속하고 필요한 정보를 캡쳐해 저장하는 방법을 알아보도록 하겠습니다.

 

라이브러리 설치

1. 마우스와 키보드를 제어할 수 있는 pyautogui

pip install pyautogui

2. 클립보드를 사용하기 위한 pyperclip - 아나콘다 설치시 기본으로 설치되어 있습니다.

pip install pyperclip
pyautogui 라이브러리는 한글입력을 직접 지원하지 않으므로,
클립보드에 원하는 한글 텍스트를 저장한 뒤, 꺼내서 사용하기 위해 필요합니다.

 

마우스 좌표 출력하기

현재 마우스 포인터의 위치를 x, y 좌표로 출력하는 프로그램입니다.

import pyautogui	# pyautogui 라이브러리 
import time		# 시간지연을 위한 time 라이브러리

while True:		# 무한반복
	print(pyautogui.position())	# 현재 마우스포인터의 좌표 표시
	time.sleep(0.1)			# 0.1초 지연

 

결과는 0.1초 마다 현재 마우스 포인터의 위치를 표시합니다.

현재 마우스 포인터의 위치

모니터에서의 좌표는 아래 그림과 같이 좌상단을 기준으로 가로축이 x, 세로축이 y 입니다.

모니터에서의 좌표

 

pyautogui 기능 살펴보기

pyautogui 라이브러리의 기능들에는 어떤것이 있는지 알아보겠습니다. 원하는 기능들을 찾으셨다면 한 번 적용해 보세요.

 

▶ 마우스 관련 함수들

함수 기능
position() 마우스 포인터의 현재 좌표(x, y)튜플형태로 가져옵니다.
size() 현재 메인모니터의 크기(width, height) 튜플형태로 가져옵니다.
moveTo(x, y) 마우스 포인터가 원하는 좌표 (x, y)로 이동합니다. 절대좌표 입니다.
moveTo(x, y, time) 마우스 포인터가 원하는 좌표 (x, y)로 지정된 시간동안 이동합니다. 절대좌표 입니다.
moveRel(dx, dy) 현재 위치에서 (dx, dy) 픽셀만큼 이동합니다. 상대좌표 입니다.
click() 현재 위치에서 마우스를 좌클릭 합니다.
> click(200, 400) (200, 400) 위치에서 마우스를 좌클릭합니다.
> click(300, 400, button='right') (300, 400) 위치에서 마우스를 우클릭합니다. (button = 'left', 'middle', 'right')
> click(x, y, clicks=2, interval=0.5) (x,y) 위치에서 마우스를 0.5초 간격으로 2번 클릭합니다. (횟수인터벌 설정)
rightClick() 현재 위치에서 마우스를 우클릭 합니다. (click()에 인자 추가로 수행 가능)
doubleClick() 현재 위치에서 마우스를 더블클릭 합니다. (click()에 인자 추가로 수행 가능)
dragTo(400, 300) (400, 300)의 위치까지  좌클릭을 유지하며 드래그합니다. 절대좌표 입니다.
dragTo(100, 200, duration=2) (100, 200)의 위치까지 2초 동안 드래그합니다. default 로 button은 left 입니다.
dragRel(200, 100, button='right') 현재 위치에서 (200, 100)만큼 우클릭을 유지하며 드래그합니다. 상대좌표 입니다.

 

▶ 키보드 관련 함수들

함수 기능
write("Hello") Hello를 입력합니다. 한글을 지원되지 않습니다.(클립보드 활용)
write("Hello", interval=0.1) Hello를 입력할 때 0.1초 간격으로 한 문자씩 입력합니다.
hotkey("Ctrl", "v") 두 개의 키를 동시에 누릅니다. [Ctrl + v] 를 입력합니다.
screenshot('path', region=(x, y, w, h) 원하는 화면을 캡쳐하여 지정된 경로에 저장합니다.
영역설정 : region = (시작 x좌표, 시작 y좌표, 가로 사이즈, 세로 사이즈)
press(keys) shift, ctrl, enter 등 특수키를 입력할 때 사용합니다.
> press('up', presses=3, interval=2) 위쪽 방향키2초 간격으로 3번 입력합니다.

 

구글창에 검색어 입력하기

키보드, 마우스 자동 제어 기능을 활용해서 구글 검색을 시도해 보겠습니다.

1. 구글을 모니터 한 켠에 열어두고,
2. 검색창 위치를 확인합니다. > position()
3. 검색창 위치로 이동하여 > moveTo()
4. 클릭한 뒤 > click()
5. 검색어를 입력하고 > write()
6. 엔터를 입력합니다. > press()

 

▶ 구글을 모니터 한 켠에 열어 놓습니다.

 

▶ 먼저, 검색창의 위치를 확인합니다.

import pyautogui
import time

while True:
    print(pyautogui.position())
    time.sleep(0.1)

 

검색어를 자동으로 입력해 봅니다.

import pyautogui
import time

# 1. 검색창으로 이동
pyautogui.moveTo(1225, 479, duration=1)
# 2. 검색창에 타이핑하기 위해 클릭
pyautogui.click()
# 3. 검색어 입력
pyautogui.write('python logo', interval=0.1)
# 4. 엔터 입력
pyautogui.press('enter')

결과를 확인해 보겠습니다.

 

마우스가 검색창으로 천천히 이동한 뒤, 클릭되고 'python logo'라는 글자가 한글자씩 입력되는 것을 볼 수 있습니다. 마지막으로 엔터를 입력해 검색 결과도 나오는 것을 확인했습니다.

 

한글 검색어 입력하기

마지막으로 한글을 입력하는 방법을 알아보겠습니다.

pyautogui 라이브러리는 한글을 지원하지 않으므로, 약간의 편법을 사용합니다. 입력하고자 하는 한글 텍스트를 클립보드에 저장한 뒤 'Ctrl+V'를 원하는 위치에 입력함으로써 클립보드에 있는 한글이 붙여지도록 하는 방법입니다.

이 때 클립보드를 사용하기 위한 라이브러리가 pyperclip 입니다.

 

import pyautogui
import pyperclip
import time

# 1. 검색창으로 이동
pyautogui.moveTo(1225, 479, duration=1)
# 2. 검색창에 타이핑하기 위해 클릭
pyautogui.click()
time.sleep(0.5)

# 3. 한글 검색어 준비
pyperclip.copy("파이썬 로고")
# 4. 클립보드 내용 붙여 넣기
pyautogui.hotkey('Ctrl','v')
time.sleep(0.5)

# 5. 엔터 입력
pyautogui.press('enter')

결과를 확인해 보겠습니다.

 

검색창으로 이동한 뒤, '파이썬 로고'라는 텍스트가 붙여넣기 되고 검색이 진행되는 것을 확인할 수 있습니다.

 


마무리

이번 포스트에서는 마우스와 키보드를 자동으로 움직일 수 있는 라이브러리인 pyautogui의 다양한 기능들을 살펴보았고, 실제 구글 검색창에서 영어와 한글로 검색을 하는 파이썬 프로그램을 작성해 보았습니다.

 

저는 예전에 외부에서 PC를 제어해야하는 프로젝트가 있었는데, 고민 끝에 simpleHotKey라는 매크로 프로그램을 사용하여 해결했었습니다. 지금 이렇게 배우고 나니 간단하게 만들어서 쓸 수 있었네요. 역시 아는게 힘입니다. ^^

 

이상으로 pyautogui 포스팅을 마치도록 하겠습니다. 감사합니다.

 

끝.

공유하기

facebook twitter kakaoTalk kakaostory naver band