반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 엑셀이나 웹브라우저처럼 파이썬 전용 패키지가 없어서 조작을 할 수 없는 경우에 아주 유용한 PyAutoGUI라는 패키지에 대해서 배워보겠습니다.

 

저는 회사에서 SAP사의 ERP(Enterprise Resource Planning)를 사용하는데, 이걸 자동화 시키려고 하니깐 무료로 제공하는 API가 없어서 고민하던 중 해당 패키지를 사용하면 좋겠다는 생각이 들어서 공부해보게 되었답니다.

 

<PyautoGUI 관련 지난 글>

 

2021.06.14 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_1편.마우스 조작하기

2021.06.15 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_2편.키보드 조작하기(ft.한글 입력 방법)

2021.06.19 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_3편.원하는 이미지를 찾아서 클릭하기

 

 

오늘은 지난 시간에 이어서 작동중에 사용자의 확인이 필요하거나 문자 혹은 패스워드를 입력 받아야 하는 경우에 대처할 수 있는 메세지 박스 기능에 대해 배워보겠습니다.

 


 

알림창 띄우기 (OK)

: alert( )

 

가장 기본적인 알림을 띄워보겠습니다. 

 

import pyautogui

pyautogui.alert('코딩유치원 자주 찾아와주세요.')

 

OK 하신겁니다~

 

alert( ) 함수에는 어떤 파라미터가 있는지 한 번 보겠습니다.

 

파라미터 (자료형) 입력값 기본값
text (str) 원하는 메시지 X
title (str) 창 제목 X
button (str) 원하는 버튼 이름
(bool) True/False
OK
timeout (int) msecond (단위: 1/1000초) None (시간제한 없음)

 

alert( ) 함수의 버튼을 클릭하거나 종료하면는 위에서 설정했던 버튼 이름을 문자열로 리턴해줍니다.

만약 timeout을 설정하셨다면 설정한 시간이 끝나고 timeout을 문자열로 리턴해줍니다.

 

아래의 예제 코드를 실행하셔서 어떻게 작동하는지 확인해보세요.

alert = pyautogui.alert('코딩유치원 자주 찾아와주세요.', title='코딩유치원', button='확인', timeout = 3000)

print(alert)

 

 

확인창 띄우기 (OK / Cancel)

: confirm( )

 

위에서 배운 알림창과 다른 것은 버튼 2개 중 하나를 선택할 수 있다는 것입니다.

 

import pyautogui

pyautogui.confirm('계속 진행하시겠습니까?')

 

 

confirm( ) 함수도 어떤 파라미터가 있는지 보겠습니다.

 

파라미터 (자료형) 입력값 기본값
text (str) 원하는 메시지 X
title (str) 창 제목 X
buttons (tuple) ('버튼 이름1', '버튼 이름2') OK & Cancel
timeout (int) msecond (단위: 1/1000초) None (시간제한 없음)

 

이 함수 역시 위에서 배운 alert( )와 같이 선택한 버튼의 버튼명을 문자열로 리턴해줍니다.

 

 

텍스트 입력창 띄우기

: prompt( )

 

이번에는 텍스트를 입력받는 것 까지 추가된 창을 띄워보겠습니다.

 

import pyautogui

text = pyautogui.prompt('원하는 메시지를 입력해주세요')

 

 

마찬가지로 설정 가능한 파라미터를 보겠습니다. default 말고는 이미 봤던 친구들이네요.

 

파라미터 (자료형) 입력값 기본값
text (str) 원하는 메시지 X
title (str) 창 제목 X
default (str) 기본적으로 입력창에 입력된 문자열 X
timeout (int) msecond (단위: 1/1000초) None (시간제한 없음)

 

default 옵션이 뭔가 했더니 메시지 입력창에 처음부터 입력되어 있는 메시지였습니다.

 

prompt( ) 함수는 OK 버튼을 누르면 위에서 입력받은 텍스트를 문자열로 리턴해주며, Cancel 버튼을 누를 시엔 None을 리턴해줍니다.

 

 

비밀번호 입력창 띄우기

: password( )

 

이 함수는 위에서 배운 prompt( ) 함수와 같지만 입력 시에 *를 출력하여 보안을 위한 기능을 추가한 함수입니다.

 

 

위의 prompt( ) 함수와 다른 파라미터는 mask 하나입니다. 만약 mask를 '='로 해주면 * 대신에 =으로 출력됩니다.

 

파라미터 (자료형) 입력값 기본값
text (str) 원하는 메시지 X
title (str) 창 제목 X
default (str) 기본적으로 입력창에 입력된 문자열 X
mask (str) 원하는 마스크 기호 *
timeout (int) msecond (단위: 1/1000초) None (시간제한 없음)

 

password( ) 함수는 prompt( ) 함수와 마찬가지로 OK 버튼을 누르면 위에서 입력받은 텍스트를 문자열로 리턴해주며, Cancel 버튼을 누를 시엔 None을 리턴해줍니다.

 

 

오늘 준비한 내용은 여기까지입니다.

 

오늘도 코딩유치원을 찾아주신 모든분들께 감사합니다.


<참고 자료>

 

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

 

Message Box Functions — PyAutoGUI documentation

PyAutoGUI makes use of the message box functions in PyMsgBox to provide a cross-platform, pure Python way to display JavaScript-style message boxes. There are four message box functions provided: The prompt() Function >>> prompt(text='', title='' , default

pyautogui.readthedocs.io

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 엑셀이나 웹브라우저처럼 파이썬 전용 패키지가 없어서 조작을 할 수 없는 경우에 아주 유용한 PyAutoGUI라는 패키지에 대해서 배워보겠습니다.

 

저는 회사에서 SAP사의 ERP(Enterprise Resource Planning)를 사용하는데, 이걸 자동화 시키려고 하니깐 무료로 제공하는 API가 없어서 고민하던 중 해당 패키지를 사용하면 좋겠다는 생각이 들어서 공부해보게 되었답니다.

 

<PyAutoGUI 관련 글>

 

2021.06.14 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_1편.마우스 조작하기

2021.06.15 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_2편.키보드 조작하기(ft.한글 입력 방법)

 


이번 시간에는 직접 좌표를 지정해서 마우스를 움직이는 방법이 아니라,

 

화면에서 찾고자 하는 이미지를 캡처&저장해놓고 그 이미지의 좌표를 찾아가는 방법에 대해서 배워보겠습니다.

 

 

1. 화면 원하는 부분 캡처하기

 

이를 위해서 먼저 화면을 캡처하는 방법을 간단히 알아보겠습니다.

 

1) Windows OS

    - 캡처 도구 (모드는 사각형 캡처를 추천)

    - 캡처 후 저장하면 자동으로 png 파일로 저장됨 (파일명은 영어로 할 것)

 

- Shift + 윈도우키 + S 

 

2) mac OS

   - Shift + Command + 4 (부분 캡처)

   - Shift + Command + 3 (전체 캡처)

   - 마찬가지로 저장 시 자동으로 png 파일로 저장됨 ((파일명은 영어로 할 것)

 

 

2. 캡처한 이미지로 좌표 정보 얻기

 

캡처한 이미지의 좌표를 얻으려면 locateOnScreen( ) 함수를 사용하시면 됩니다. 이때 괄호 안의 이미지는 같은 디렉토리에 위치해야 작동합니다. 굳이 이미지 파일을 다른 폴더에 위치시키고 싶다면 해당 경로를 입력해주어야합니다.

 

저의 경우는 화면 우측상단의 Run 버튼을 캡처해서 찾아보는 코드를 작성해보았습니다. img_capture 변수에 들어가 있는 값을 확인해보면 Box(left=x 좌표, top=y 좌표, width = 이미지 너비, height=이미지 높이)가 출력되는 것을 확인하실 수 있습니다.

 

img_capture = pyautogui.locateOnScreen("Run_icon.png")

print(img_capture)

pyautogui.click(img_capture)

 

이미지의 경로가 제대로 설정되지 않은 경우에는 에러가 출력되며, 경로는 정확하지만 화면상에서 해당 이미지를 못 찾았을 때는 None(값이 없음을 의미)을 돌려줍니다.

 

 

3. 캡처한 이미지가 화면에 여러개 일 때

 

예를 들어서 아래와 같은 체크박스를 중복 선택해야한다면 어떻게 해야할까요?

그럴 때는 아래와 같이 locateAllOnScreen( ) 함수와 for 문으로 해결 가능합니다. 위에서 배운 locateOnScreen( ) 함수와 무엇이 다른지 보이시죠? 해당 함수를 사용하면 원하는 이미지의 위치들을 리스트에 저장해놓고 for문으로 하나씩 꺼내어 쓰는 개념입니다.

 

for i in pyautogui.locateAllOnScreen("checkbox.png"):
    
    pyautogui.click(i, duration=0.25)

 

 

4. 범위 안에서만 캡처한 이미지를 찾고 싶을 때

 

다른 영역에 있는 중복되는 이미지를 무시하고 싶거나, 이미지 검색 범위를 좁혀 속도를 개선하고 싶을 때 사용하면 좋을 것 같아요.

 

import pyautogui

img_capture = pyautogui.locateOnScreen("Run_icon.png", region=(1800, 0, 1920, 100))

pyautogui.moveTo(img_capture)

 

Tip. 코드 실행 속도 측정법

import pyautogui
import time

start = time.time()  # 시작 시간 저장

img_capture = pyautogui.locateOnScreen("Run_icon.png")

pyautogui.moveTo(img_capture)

# 현재시각 - 시작시각 = 실행 시간
print("코드 실행 시간 :", time.time() - start)  

 

 

5. 이미지 인식이 됐다안됐다 할 때

 

가끔 찾고자 하는 이미지와 화면의 이미지가 어떤 이유로 100% 일치하지 않아서 잘 되던 코드가 실행이 되지 않을 경우도 있습니다. 저는 아직 겪어보지  않았지만 혹시 이런 현상이 발생한다면 지금 알려드리는 옵션을 사용해보세요!

 

이런 경우에는 예를 들어 일치도를 70% 이상이면 같은 이미지로 인식하라고 설정할 수가 있습니다.

 

이 기능을 사용하려면 아래의 패키지를 설치해주셔야 합니다.

# 이미지 처리 패키지인 opencv-python 설치
pip install opencv-python

 

사용법은 간단합니다. 지금껏 배워왔던 locateOnScreen 함수안에 confidence 옵션을 설정해주시면 됩니다.

 

img_capture = pyautogui.locateOnScreen("Run_icon.png", confidence=0.7) # 70%

pyautogui.moveTo(img_capture)

 

오늘 준비한 내용은 여기까지 입니다.

 


<참고 자료>

 

나도코딩_업무자동화 유튜브 강의:

https://www.youtube.com/watch?v=exgO1LFl9x8&t=3083s 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 엑셀이나 웹브라우저처럼 파이썬 전용 패키지가 없어서 조작을 할 수 없는 경우에 아주 유용한 PyAutoGUI라는 패키지에 대해서 배워보겠습니다.

 

저는 회사에서 SAP사의 ERP(Enterprise Resource Planning)를 사용하는데, 이걸 자동화 시키려고 하니깐 무료로 제공하는 API가 없어서 고민하던 중 해당 패키지를 사용하면 좋겠다는 생각이 들어서 공부해보게 되었답니다.

 

<관련 글>

 

2021.06.14 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_1편.마우스 조작하기

 


 

이번 시간에는 지난 시간에 이어 PyAutoGUI 패키지로 키보드 조작하는 법을 공부해 보겠습니다.

 

키보드가 작동하는 것을 확인하려면 일단 메모장을 켜주세요. 메모장이 아니더라도 입력이 가능한 프로그램이면 뭐든지 가능합니다.

저의 경우엔 그냥 VS code 코딩창을 이용했습니다.

 

 

1. 문자 입력하기

 

가장 기본적인 write 함수입니다. 문자열이나 리스트의 요소를 입력하는 함수입니다.

참고로 write 함수와 typewrite는 이름만 다르고 그 기능은 같은 함수이며, 이왕이면 좀 더 짧은 write 함수를 추천드립니다.

 

import pyautogui

pyautogui.click(500, 500)

pyautogui.write('Hello world!', interval=0.2)

pyautogui.write(['H', 'e', 'l', 'l', 'o'], interval=0.2)

 

 

2. 개별 키 입력하기

 

이러한 개별 키 입력 함수는 위에서와 같이 내용을 입력하기 보다는 키 자체의 기능을 이용할 때 많이 사용할 것 같습니다.

입력 가능한 키는 보기 좋게 표로 정리해 놓았으니 참고해주세요.

 

pyautogui.press('원하는 키')

 

<입력 가능한 키> 

 

기능
'a', 'b', 'c', 'A', 'B', 'C', '1', '2', '3', '!', '@', '#' 등등 알파벳, 숫자, 특수문자 등등
'enter' (or 'return' or '\n') ENTER
'esc' ESC
'shift', 'shiftleft', 'shiftright' SHIFT, 왼쪽/오른쪽 SHIFT
'alt', 'altleft', 'altright' ALT, 왼쪽/오른쪽 ALT
'ctrl', 'ctrlleft', 'ctrlright' CTRL, 왼쪽/오른쪽 CTRL
'tab' (or '\t') TAB
'space' SPACE
'backspace', 'delete', 'del' BACKSPACE, DELETE
'pageup', 'pagedown', 'pgdn', 'pgup' PAGE UP, PAGE DOWN
'home', 'end' HOME, END
'up', 'down', 'left', 'right' 방향키
'f1', 'f2', 'f3', and so on F1 ~ F12
'pause' PAUSE
'capslock', 'numlock', 'scrolllock' CAPS LOCK, NUM LOCK, SCROLL LOCK
'insert' INSERT
'printscreen' 화면 캡처
'winleft', 'winright' 오른쪽/왼쪽 윈도우 키 (Windows 전용)
'command' Command (macOS 전용)
'option' OPTION (macOS 전용)
hanguel', 'hangul',
한/영 전환 (pyautogui에서 한글 지원 안해서 필요한지 모르겠음)

 

그 외에도 사용가능한 키 확인 해보시려면 아래의 코드로 확인 가능합니다.

print(pyautogui.KEYBOARD_KEYS)

 

 

3. 조합 키 입력

 

키를 하나가 아니라 동시에 눌러줘야하는 경우가 있습니다. 단축키 처럼 말이죠.

이 기능을 이용하면 여러분들이 아시는 단축키를 모두 사용할 수 있으니 참 유용하겠죠?!

 

# 붙여넣기 단축키
pyautogui.hotkey("ctrl", "c")

# 같은 기능 (비추천)
pyautogui.keyDown("ctrl")
pyautogui.keyDown("c")
pyautogui.keyUp("c")
pyautogui.keyUp("ctrl")

 

 

4. 한글 입력

 

위에서 배운 write 함수로는 한글을 입력할 수가 없답니다. 그래서 pyperclip이라는 패키지를 이용해서 클립보드에 잠시 한글을 저장해뒀다가 붙여넣는 방식을 사용해야 합니다.

 

먼저 아래의 코드를 커맨드 창에 입력하셔서 pyperclip 패키지를 설치합니다. 저는 왜인지 모르지만 이미 설치되어 있네요. 아마 Anaconda 패키지에 포함되어 있는 걸까요?

pip install pyperclip

 

설치를 완료하셨다면 pyperclip을 임포트 해주시고, 아래와 같이 원하는 한글 문자열을 저장했다가 Ctrl+V 단축키로 붙여넣어 주면 끝~!

 

import pyperclip

# "코딩유치원"을 클립보드에 저장
pyperclip.copy("코딩유치원") 

# 클립보드에 있는 내용을 붙여넣기
pyautogui.hotkey("ctrl", "v")

 

 

오늘 준비한 내용은 여기까지입니다.

 

다음 시간에는 화면에서 이미지를 인식해서 원하는 아이콘을 찾는 방법을 배워보겠습니다.


<참고 자료>

 

1. Automate the Boring Stuff with Python

https://automatetheboringstuff.com/2e/chapter20/

 

<나도코딩_업무자동화 유튜브 강의>

https://www.youtube.com/watch?v=exgO1LFl9x8&t=3083s 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 엑셀이나 웹브라우저처럼 파이썬 전용 패키지가 없어서 조작을 할 수 없는 경우에 아주 유용한 PyAutoGUI라는 패키지에 대해서 배워보겠습니다.

 

저는 회사에서 SAP사의 ERP(Enterprise Resource Planning)를 사용하는데, 이걸 자동화 시키려고 하니깐 무료로 제공하는 API가 없어서 고민하던 중 해당 패키지를 사용하면 좋겠다는 생각이 들어서 공부해보게 되었답니다.


PyAutoGUI란?

 

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

 

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

 

PyAutoGUI는 마우스/키보드 자동제어를 위한 패키지입니다. 흔히 알고계시는 수강신청, 콘서트 티켓 예매 매크로 같은 것을 가능케 하는 것이라 이해하시면 되겠습니다.

 

흔히 운영체제(OS)에 관계없이 모두 사용가능한 패키지를 크로스 플랫폼이라고 부르는데, PyAutoGUI가 바로 크로스 플랫폼 패키지입니다. 즉, Window, macOS, Linux와 같은 대중적인 운영체제에 모두 적용가능하다는 말입니다.

 

 

설치 방법

 

터미널 창에 pip 또는 conda를 통해서 설치를 하시면 됩니다. Anaconda 패키지로 파이썬을 설치하신 분이라면 두가지 중 아무거나 선택하시면 되고, 순정 파이썬을 설치하셨다면 pip로만 설치 가능합니다.

 

pip install pyautogui
conda install -c conda-forge pyautogui

 

사용 방법

 

1. 모니터 크기(해상도)와 마우스 현재 위치 얻기

 

PyAutoGUI는 크게 마우스와 키보드 조작 기능으로 나눌 수 있습니다. 그리고 마우스 조작을 위해서는 좌표에 대한 이해가 필요합니다. 

 

PyAutoGUI는 모니터 화면의 가장 왼쪽 위 꼭지점을 영점(0,0)으로 하며, 픽셀 단위로 x,y좌표를 가집니다.

 

0,0       X increases -->
+---------------------------+
|                           	| Y increases
|                           	|     |
|   1920 x 1080 screen      	|     |
|                           	|     V
|                           	|
|                           	|
+---------------------------+ 1919, 1079

 

 

여러분들의 모니터 해상도와 현재 마우스 위치를 확인해보기 위해서 아래의 코드를 실행해봅시다. 

 

import pyautogui

# 현재 사용하는 모니터의 해상도 출력
print(pyautogui.size())

# 현재 마우스 커서의 위치 출력
print(pyautogui.position())


<결과>

>>> Size(width=1680, height=1050)
>>> Point(x=1675, y=18)

 

참고로, 저는 트리플 모니터를 사용하는데, 사이즈는 항상 1680, 1050으로 나오며, 마우스 커서의 위치는 가장 기본 모니터인 맥북 화면의 좌측상단을 기준으로 마이너스 값이 나오기도 하고, x가 3000이 넘는 값이 나오기도 하네요.

가장 아래 모니터가 기본 모니터

 

Tip. 마우스 현재 위치 & RGB 색상 실시간으로 얻기

 

이 기능을 알기 전엔 제가 의도하는 위치의 x, y 값을 얻기위해서 위에서 배운 print(pyautogui.position( ))을 무한 반복했었습니다. 하지만 이 코드 한 줄이면 정말 편리하게 원하는 좌표를 얻을 수 있답니다.

 

pyautogui.mouseInfo()

 

참고로, windows OS 에서는 RGB 값까지 출력되지만, mac OS에서는 RGB값을 못받아오네요.

 

Windows에서 실행 시

 

macOS에서 실행 시

 

2. 마우스 이동

 

마우스를 이동하는 방법은 두 가지가 있습니다. 위에서 언급한 영점을 기준으로 좌표를 찍어 이동하는 절대 이동과 현재 커서의 위치를 기준으로 지정한 만큼 이동하는 상대 이동입니다. 코드를 보시면 바로 이해 가실거예요!

# 절대 좌표로 이동

pyautogui.moveTo(100, 100)                 # 100, 100 위치로 즉시 이동
pyautogui.moveTo(200, 200, duration=0.5)   # 200, 200 위치로 0.5초간 이동


# 상대 좌표로 이동

pyautogui.move(100, 100, duration=1)    # 현재 위치 기준으로 100, 100만큼 1초간 이동

 

3. 마우스 클릭

마우스를 이동하는 법을 배웠으면 클릭하는 법도 배워야겠죠?

 

가장 많이 사용하실 함수는 click( ) 함수입니다. 아래와 같이 많은 옵션이 있으니 하나하나 알아보겠습니다.

pyautogui.click(x=None, y=None, clicks=1, interval=0, button=PRIMARY, 
                duration=0, tween=linear, logScreenshot=None, _pause=True)

 

단순히 해당 위치에서 클릭을 수행합니다.

pyautogui.click()

 

<여기서 잠깐>

 

macOS의 경우엔 아래와 같이 권한 허용을 해주셔야지, 마우스 클릭 제어를 할 수 있습니다.

 

 

해당 위치로 가서 클릭을 수행합니다.

pyautogui.click(200, 200)

 

해당 위치에서 총 2번 클릭하며, 클릭간의 시간은 0.2초입니다. 마우스는 오른쪽 버튼을 클릭합니다.

참고로, button 옵션을 설정안하면 기본적으로 왼쪽 버튼으로 클릭하며, 'middle'과 'right', 'left'를 옵션으로 넣어줄 수 있습니다.

pyautogui.click(clicks=2, interval=0.2, button='right')

 

그 외의 옵션은 거의 사용하지 않으므로 생략하도록 하겠습니다.

 

 

4. 마우스 드래그

 

마우스를 드래그 하는 경우도 종종 있습니다. 사용법은 click 함수와 거의 같습니다.

# 1초간 400, 400 위치로 이동 후, 절대 좌표 500, 500으로 2초간 드래그
pyautogui.click(400, 400, duration=1)
pyautogui.dragTo(500, 500, 2, button='left')

# 현재 마우스 위치 기준으로 300, 300 범위만큼 왼쪽 버튼으로 드래그
pyautogui.dragRel(300, 300, 2, button='left')

 

5.  스크롤 내리기/올리기

 

우리는 마우스 휠을 조작해서 페이지의 스크롤을 내리고 올립니다. 이것도 아래의 코드로 가능합니다.

 

# 양수이면 위, 음수이면 아래

pyautogui.scroll(-100) 

pyautogui.scroll(100) 

 

오늘은 PyAutoGUI가 무엇인지와 마우스 사용법에 대해서 공부해봤습니다.

 

다음시간에는 키보드 사용법을 공부해 보겠습니다.


<참고 자료>

 

<나도코딩_업무자동화 유튜브 강의>

https://www.youtube.com/watch?v=exgO1LFl9x8&t=3083s 

 

<Codetorial PyAutoGUI Tutorial>

https://codetorial.net/pyautogui/mouse_control.html

 

반응형

+ Recent posts