pyautogui 이미지 인식 기반 자동화 고급편 (실전 안정화 전략)
pyautogui 이미지 인식 기반 자동화 고급편 (실전 안정화 전략)
좌표 기반 자동화는 빠르지만 치명적인 단점이 있습니다.
- 해상도 바뀌면 깨짐
- 창 위치 바뀌면 오작동
- UI 조금만 바뀌어도 실패
그래서 실전에서는 이미지 인식 기반 자동화를 사용합니다.
이번 글에서는 단순 locateOnScreen()을 넘어서 실전에서 안정적으로 사용하는 고급 전략을 정리합니다.
1️⃣ 기본 준비
설치
1
pip install pyautogui opencv-python
confidence옵션은 OpenCV 설치가 필수입니다.
2️⃣ 기본 이미지 인식 구조
1
2
3
4
5
6
import pyautogui
location = pyautogui.locateOnScreen("button.png", confidence=0.9)
if location:
pyautogui.click(location)
하지만 이 코드는 실전에서 거의 그대로 쓰기 어렵습니다.
왜냐하면:
- 못 찾으면 None
- 찾는 동안 느림
- 여러 개면 첫 번째만 반환
- 화면 전체 검색 → 매우 느림
이제부터 고급 전략으로 개선합니다.
3️⃣ 검색 영역 제한 (속도 5~10배 향상)
전체 화면 대신 특정 영역만 검색하면 속도가 극적으로 빨라집니다.
1
2
3
4
5
6
7
region = (100, 200, 800, 600)
location = pyautogui.locateOnScreen(
"button.png",
region=region,
confidence=0.9
)
💡 실전 팁 창 위치를 pygetwindow로 고정한 뒤 그 창 내부 좌표만 region으로 지정하세요.
4️⃣ center() 사용해서 정확히 클릭
1
2
3
4
5
location = pyautogui.locateOnScreen("button.png", confidence=0.9)
if location:
x, y = pyautogui.center(location)
pyautogui.click(x, y)
직접 click(location) 하지 말고 반드시 center()를 거쳐 클릭하는 습관이 좋습니다.
5️⃣ 여러 개 찾기 (locateAllOnScreen)
같은 버튼이 여러 개 있을 경우:
1
2
3
4
5
matches = list(pyautogui.locateAllOnScreen("item.png", confidence=0.9))
for m in matches:
x, y = pyautogui.center(m)
pyautogui.click(x, y)
6️⃣ 안정적인 “기다림 로직” 만들기
실전 자동화는 반드시 대기 로직이 필요합니다.
❌ 잘못된 방식:
1
pyautogui.click("button.png")
✅ 올바른 방식:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import time
def wait_and_click(image, timeout=10, confidence=0.9):
start = time.time()
while time.time() - start < timeout:
location = pyautogui.locateOnScreen(image, confidence=confidence)
if location:
x, y = pyautogui.center(location)
pyautogui.click(x, y)
return True
time.sleep(0.3)
return False
사용:
1
2
if not wait_and_click("confirm.png"):
raise RuntimeError("확인 버튼을 찾지 못했습니다.")
7️⃣ 그레이스케일 모드로 속도 향상
1
2
3
4
5
location = pyautogui.locateOnScreen(
"button.png",
confidence=0.9,
grayscale=True
)
✔ 속도 증가 ✔ 색상 변화에 덜 민감
8️⃣ 이미지 캡처 잘 만드는 법 (성공률의 70%)
이미지가 잘못되면 자동화는 실패합니다.
✅ 좋은 이미지 조건
- 버튼만 정확히 크롭
- 여백 최소화
- 텍스트만 따로 자르지 말 것 (배경 일부 포함)
- 해상도 동일 환경에서 캡처
❌ 피해야 할 것
- hover 상태 캡처
- 클릭 후 색상 바뀐 상태
- 그림자 포함
9️⃣ 예외 처리 + 로그 구조 (실전용)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import logging
logging.basicConfig(level=logging.INFO)
def safe_click(image):
location = pyautogui.locateOnScreen(image, confidence=0.9)
if not location:
logging.error(f"{image} not found")
return False
x, y = pyautogui.center(location)
pyautogui.click(x, y)
logging.info(f"{image} clicked")
return True
🔟 실전 구조 예시 (HTS 자동화 흐름)
1
2
3
4
focus_window(win)
wait_and_click("buy_tab.png")
wait_and_click("order_button.png")
wait_and_click("confirm.png")
핵심은 좌표가 아니라 상태 기반 자동화입니다.
- 버튼이 보이면 클릭
- 안 보이면 기다림
- timeout 시 예외 발생
🚨 실전에서 가장 중요한 3가지
- 창 위치 고정
- region 제한
- timeout 대기 로직
이 세 가지만 지켜도 오작동 확률이 크게 줄어듭니다.
🔥 마무리
이미지 인식 기반 자동화는 단순 매크로가 아니라 RPA 수준의 자동화로 가는 첫 단계입니다.
좌표 자동화는 빠르지만 깨지기 쉽고, 이미지 기반 자동화는 느리지만 안정적입니다.
실전에서는:
좌표 + 이미지 혼합 전략 (창 고정 → region 제한 → 이미지 인식 → center 클릭)
이 구조가 가장 안정적입니다.
This post is licensed under CC BY 4.0 by the author.