본문 바로가기

PYTHON

pywinauto로 GUI 자동화 프로그램 시작하기

반응형

pywinauto는 윈도 O/S용 프로그램의 다이얼로그나 컨트롤에, 마우스 클릭이나 키보드 입력 등을, 사람이 직접 하지 않고 프로그램이 대신할 수 있도록 해주는 python 모듈입니다.

 

[pywinauto]

 

What is pywinauto — pywinauto 0.6.8 documentation

© Copyright 2018, Mark Mc Mahon and Contributors Revision aea0429b.

pywinauto.readthedocs.io

일단, 어떻게 사용되는지 눈으로 확인해 봅시다!!!

 

* 모든, 테스트는 윈도 10을 사용했습니다. 

 

먼저, pywinauto를 설치합니다.

 

pip install pywinauto

 

그리고, 노트패드를 실행해서 Hi from python. 을 입력하는 코드를 작성하고 실행해 보겠습니다.

 

from pywinauto import Application

app = Application(backend="win32").start("notepad.exe")

dlg = app.window(title_re=".* 메모장")

dlg.Edit.type_keys("Hi from Python.", with_spaces=True)

 

 

 

 

노트패드에 텍스트를 입력해 봅시다

 

오... 예상한대로, 노트패드가 실행되고, 문자도 출력됩니다.!!!

 

이런게 있다는 걸 왜 이제야.....알았을까요. 나만 몰랐나???

 

pywinauto의 기능을 100% 사용하려면 많은 것을 알아야 하겠지만, 우선, 제어할 프로그램의 종류만 알아도 바로 사용할 수 있습니다.

 

위 코드 중 backend="win32" 라는 부분이 있는데, pywinauto에게 어떤 종류의 프로그램을 제어하려는지 알려주는 것입니다. 설정할 수 있는 값은, win32 또는 uia이며, 각각의 의미는 다음과 같습니다.

 

  •  win32

공식 문서에 다음과 같이 설명되어 있습니다.

 

MFC, VB6, VCL, simple WinForms controls and most of the old legacy apps

 

간단히 말하면, 최신 기술이 사용된 것이 아니고, 올드한 프로그램들을 말합니다. 노트패드 같은 것 말이죠.

프로그램 UI만 봐도 좀 오래된 느낌이 팍팍나죠?

 

  • uia  

공식 문서에 다음과 같이 설명되어 있습니다.

 

WinForms, WPF, Store apps, Qt5, browsers

 

윈도우 스토어에서 설치한 프로그램등, 최신 기술이 사용된 프로그램을 말합니다. 

프로그램 UI만 봐도, 뭔가 세련되고 그런것들? ㅎㅎ

 

두 가지 중 어떤 것을 사용할지 모르겠다면, 번갈아서 테스트해 보면 됩니다!!!! 

 

프로그래밍이라는게 다 그렇죠 뭐 ㅎㅎㅎ

 

그럼, 이번에는 그림판 프로그램으로 확인해 보겠습니다.

 

목표는 그림판 프로그램을 실행하고 파일 버튼을 클릭해서 파일 메뉴를 여는 것입니다.

 

먼저, backend="win32"로 시도해 보겠습니다.

 

from pywinauto import Application
import sys

app = Application(backend="win32").start("mspaint.exe")

try:
    dlg = app.window(title_re=".* 그림판")

    dlg.파일.click()
except Exception:
    exc_type, value, traceback = sys.exc_info()
    print(exc_type, value, traceback)

 

그림판은 실행되지만 파일이란 컨트롤을 찾을 수 없다는 에러가 발생합니다.

 

그림판은 backend=win32로 안되요

 

이번엔 backend="uia"로 해보겠습니다.

 

from pywinauto import Application
import sys

app = Application(backend="uia").start("mspaint.exe")

try:
    dlg = app.window(title_re=".* 그림판")

    dlg.파일.click()
except Exception:
    exc_type, value, traceback = sys.exc_info()
    print(exc_type, value, traceback)

 

그림판이 실행되고 시간이 조금 지난 후 파일 메뉴가 선택됩니다.

 

그림판은 backend="uia"로 해야되요

 

이상의 내용만 알아도 pywinauto를 사용할 준비는 된 것 같습니다.

 

내가 제어하고 싶은 컨트롤을 찾는 방법은 다른 글에서 다뤄보겠습니다.

 

 

 

반응형