import pyautogui
pyautogui.mouseInfo()
위의 창이 뜨는데 해당 창이 열려 있는 상태에서 f1을 누르면 해당 좌표와 색 코드가 클립보드에 복사된다.
데스크탑 자동화 코드가 실행 중일 때 모니터의 네 모서리에 마우스를 가져다 놓으면 강제 종료된다.
pyautogui.FAILSAFE = False
pyautogui.PAUSE = 1 # 모든 동작에 1초씩 sleep 적용
FAILSAFE는 모서리에 마우스를 가져가도 프로그램이 종료되지 않게 한다. 그래서 유사시에 강제 종료를 할 수 없기 때문에 사용하지 않는 것이 좋은 옵션이다.
PAUSE는 모든 동작에 sleep을 적용한다.
import pyautogui
# 스크린 샷 찍기
img = pyautogui.screenshot()
img.save('screenshot.png') # 파일로 저장
#23,14 60,169,242 #3CA9F2
pixel = pyautogui.pixel(23, 14)
print(pixel)
print(pyautogui.pixelMatchesColor(23, 14, (60, 169, 242)))
print(pyautogui.pixelMatchesColor(23, 14, pixel))
(60, 169, 242)
True
True
pixel()은 해당 좌표에 해당하는 픽셀의 RGB 값을 가져온다.
pixelMatchesColor()는 주어진 좌표의 픽셀의 RGB값이 주어진 RGB값과 다르면 False 같으면 True를 반환한다.
import pyautogui
file_menu = pyautogui.locateOnScreen("./desktop_automation/file_menu.png")
print(file_menu)
pyautogui.click(file_menu)
Box(left=39, top=4, width=50, height=25)
locateOnScreen()은 이미지 파일을 주면 그 이미지를 화면에서 찾아서 좌표를 반환한다.
그래서 pyautogui.click()에 반환된 좌표를 주면 해당 좌표로 이동해서 클릭한다.(여기서는 사각형 좌표가 반환되어 사각형의 중앙으로 이동)
이미지를 찾지 못하면 None을 반환한다.
pyautogui는 이미지 기반이어서 화면 해상도가 달라지면 작동하지 않을 확률이 매우 높다.
하나의 페이지에 여러 같은 이미지가 있을 때는 locateAllOnScreen()을 사용하면 된다.
import pyautogui
for i in pyautogui.locateAllOnScreen('./desktop_automation/checkbox.png'):
print(i)
pyautogui.click(i)
locateAllOnScreen()은 화면 내에서 지정한 이미지에 해당하는 모든 정보를 가져온다.
# 속도 개선
# 1. GrayScale
file_menu = pyautogui.locateOnScreen("./desktop_automation/file_menu.png", grayscale=True)
pyautogui.moveTo(file_menu)
# 2. 범위 지정
file_menu = pyautogui.locateOnScreen("./desktop_automation/file_menu.png", region=(0, 0, 300, 300))
pyautogui.click(file_menu)
# 3. 정확도 조정
file_menu = pyautogui.locateOnScreen("./desktop_automation/file_menu.png", confidence=0.9)
pyautogui.click(file_menu)
grayscale은 말 그대로 이미지를 grayscale로 처리하여 비교하며 찾는 옵션으로 속도는 개선될 수 있지만 정확도가 떨어질 수 있다.
region은 (x, y, width, height)의 형태로 범위를 지정해서 해당 범위만을 찾게하는 것으로 속도를 개선한다.
confidence는 정확도를 조정하는 옵션이다. 0.9를 주면 주어진 이미지와 90% 이상 일치하면 인식한다.
자동화를 할 때 해당하는 화면이 바로 나오지 않고 잠시후에 나오는 경우가 있다. 그래서 해당 대상이 나올 때까지 기다릴 필요가 있다.
# 자동화 대상이 바로 보여지지 않는 경우
# 1. 계속 기다리기
check_box = pyautogui.locateOnScreen('./desktop_automation/checkbox.png')
while check_box is None:
check_box = pyautogui.locateOnScreen('./desktop_automation/checkbox.png')
pyautogui.click(check_box)
# 2. 일정 시간동안 기다리기 (TimeOut)
timeout = 10 # 10초 대기
start = time.time() # 시작 시간 설정
check_box = None
while check_box is None:
check_box = pyautogui.locateOnScreen('./desktop_automation/checkbox.png')
end = time.time() # 종료 시간 설정
if end - start > timeout: # 지정한 10초를 초과하면
print('시간 종료')
sys.exit()
pyautogui.click(check_box)
import pyautogui
fw = pyautogui.getActiveWindow() # 현재 활성화된 창 정보를 가져온다.
print(fw.title) # 창의 제목 정보
print(fw.size) # 창의 크기 정보 (width, height)
print(fw.left, fw.top, fw.right, fw.bottom) # 창의 좌표 정보
pyautogui.click(fw.left + 10, fw.left + 10)
for w in pyautogui.getAllWindows():
print(w) # 모든 윈도우 가져오기
w = pyautogui.getWindowsWithTitle('캡처 도구')[0]
print(w)
if w.isActive == False: # 현재 활성화가 되지 않았다면
w.activate() # 활성화 (맨 앞으로 가져오기)
if w.isMaximized == False: # 현재 최대화가 되지 않았다면
w.maximize() # 최대화
if w.isMinimized == False: # 현재 최소화가 되지 않았다면
w.minimized() # 최소화
w.restore() # 화면 원복
w.close() # 윈도우 닫기
<Win32Window left="1576", top="161", width="643", height="329", title="캡처 도구">
active()는 최소화되어 있을 때는 작동하지 않는다.
import pyautogui
import pyperclip
w = pyautogui.getWindowsWithTitle('제목 없음')[0]
w.activate()
pyautogui.write('12345') # '12345'를 입력한다
pyautogui.write('KrTeaparty', interval=1) # 글자마다 1초 동안 기다리고 입력
pyautogui.write(['t', 'e', 's', 't', 'left', 'left', 'right', 'l', 'a', 'enter'], interval=0.25)
# t e s t 순서대로 적고 왼쪽 방향키 2번, 오른쪽 방향키 1번 l a 적고 엔터키 입력
# 특수 문자
pyautogui.keyDown('shift') # shift 키를 누른 상태에서
pyautogui.press('4') # 숫자 4를 입력하고
pyautogui.keyUp('shift') # shift 키를 뗀다
# 조합키 (Hot key)
pyautogui.keyDown('ctrl')
pyautogui.keyDown('a')
pyautogui.keyUp('a') # press('a')
pyautogui.keyUp('ctrl') # Ctrl + A
# 간편한 조합키
pyautogui.hotkey('ctrl', 'a') # ctrl 누름 > a 누름 > a 뗌 > ctrl 뗌
# 한글 입력
pyperclip.copy('안녕') # '안녕' 글자를 클립보드에 저장
pyautogui.hotkey('ctrl', 'v') # ctrl + v
pyautogui.write는 한글을 입력하지 못한다. 그래서 클립보드에 저장하고 붙여넣기 하는 방식으로 한글을 입력해야한다.
ctrl + alt + del를 입력하면 자동화 프로그램이 종료된다.
import pyautogui
pyautogui.countdown(3) # 카운트 다운을 해줌 (3 2 1)
print('Automation Start')
pyautogui.alert('Something Wrong', 'Alert title') # 확인 버튼만 있는 팝업
result = pyautogui.confirm('Continue?', 'Confirm') # 확인, 취소 버튼
print(result) # 확인이면 'OK', 취소면 'Cancel'
result = pyautogui.prompt('Write centence', 'input') # 사용자 입력
print(result) # 입력하면 입력한 문자열, 취소하면 None
result = pyautogui.password('input password') # 암호 입력
print(result)
password는 입력한 부분이 *로 치환되어 무엇을 입력하고 있는지 보이지 않게 해주는 것이다.