pyautogui
마우스와 키보드를 자동으로 움직여보자
자동화가 뭐지?
자동화는 말그대로 사람 개입없이 자동으로 무언가를 하는것이다. 기존에 사람이 수동으로 직접하던것이 뭐가 있는지 생각해보자. 가장 대표적으로 컴퓨터를 할 때 키보드를 누르는 것과 마우스를 움직이는 것이 있다. 사실 pyautogui 는 이 2 가지를 대신 해주는 것이다. 이 원리가 궁금할텐데, 정확한건 나도 잘 모르지만 아마도 키보드나 마우스 등의 입력장치의 신호를 운영체제 레벨에서 받아들이는데, 그 부분을 캐치하여 활용하는 것 같다. 내부가 어떻게 되어있는지는 잘 모르겠지만 윈도우, 리눅스, 맥에서도 문제없이 돌아가는 cross-platform 툴이다. 아무튼 pyautogui 로 입력기능 자동화가 가능하다는 것이 중요하다. 흔히 말하는 매크로가 이 기능을 사용하는 것이다. 잘 활용하면 업무나 작업을 손쉽게 처리할 수도 있는 아주 유용한 개념이다. 이런저런 이유로많은 사람들이 자동화에 대해 많은 관심을 가지고 있다.
설치
pip 가 있다면 간단하게 install 할 수 있다.pip install pyautogui
기본기능 알아보기
우선 알아야할것은 마우스를 다룰 때 좌표체계다.
좌상단이 원점, 가로가 x, 세로가 y 다. 여타 플랫폼에서의 체계와 대략 비슷하다. 나머지는 딱히 신경쓸게 없다.
복잡한게 없다. 바로 따라해보자.
마우스 위치 확인
import pyautogui
pyautogui.position()
# --> (x, y)
간단하게 현재 마우스의 좌표를 출력한다. 좌표체계를 알고있으면 자신의 마우스가 어딨는지 잘 알 수있다.
마우스 이동
# 1 초에 걸쳐 해당 좌표로 이동
pyautogui.moveTo(670, 300, 1)
현재 마우스 포이터가 목표좌표에 대해 멀리있으면 가까이있을때 보다 더 빨리 움직인다.
pyautogui.dragTo(100, 200, 3, button='right')
마우스를 클릭한 채 3 초에 걸쳐 해당 좌표로 이동
3 번째 인자를 생략하면 즉시 해당 좌표로 이동한다.
마우스 클릭
# 즉시 클릭
pyautogui.click(button='right')
# 좌표설정 후 클릭
pyautogui.click(x=100, y=200)
# 더블클릭, 간격설정
pyautogui.click(x=100, y=200, clicks=2, interval=.2) # doubleClick
click
대신 keyDown
, keyUp
을 사용하여 더 세밀한 조작이 가능하다.
마우스 스크롤
# 마우스 휠 동작에 해당. 위로 100 픽셀을 10 번 = 1,000 픽셀
for i in range(10):
pyautogui.scroll(100)
키보드 입력
# 천천히 타이핑하는 효과
pyautogui.click(button='left')
#pyautogui.write('Hello world!')
pyautogui.write('Hello world!', interval=0.1)
마치 사람이 쓰는것같은 효과가 난다.
interval
을 없애면 한 번에 입력된다.
키보드 연속동작
# 확대
pyautogui.keyDown('ctrl')
pyautogui.press('-')
pyautogui.press('-')
pyautogui.keyUp('control')
ctrl
키를 누른 채로 -
키를 2 번 누른 후 다시 ctrl
을 놓는다.
흔히 사용하는 화면축소 커맨드다.
스크린샷
im2 = pyautogui.screenshot('my\_screenshot.png')
im = pyautogui.screenshot('screenshot.jpg', region=(0,0, 300, 800))
'기타 저장소 > 유용한 tool' 카테고리의 다른 글
윈도우에서 리눅스 사용하기 - WSL (0) | 2020.03.03 |
---|---|
움짤, 짤 만드는 프로그램 - GifCam (0) | 2020.02.29 |
파이썬 완전 자동화(프로그램 자동화)! - pywinauto 사용하기 (5) | 2020.02.24 |
파이썬 시각화의 끝판왕 bokeh 사용하기 (2) | 2020.02.20 |
차세대 개발환경, jupyter lab 을 사용하자 (2) | 2020.02.19 |
댓글