파이썬 윈도우 응용프로그램 자동화 - pywinauto 말고 Clicknium
pywinauto
파이썬 기반의 윈도우 응용프로그램 자동화 모듈로 유명한것은 pywinauto인데, 사실 pywinauto 사용하기에 굉장히 불편하다.
아래는 pywinauto에 대한 따라하기 예제 문서 중 가장 나은것으로, pywinauto로 윈도우 응용프로그램을 어떻게 자동화하는지 대략 감을 잡을 수 있을 것이다.
🤖 pywinauto 사용법 - 윈도우 프로그램 테스트 자동화
🤖 pywinauto 사용법 - 윈도우 프로그램 테스트 자동화
pywinauto - 소프트웨어 테스트 자동화 일상적으로 반복적으로 수행하는 리그레이션 테스트 작업중 단순하게 클릭 및 화면 확인 정도의 테스트 케이스는 매번 사람이 직접 눌러서 확인하기에는 너
inpa.tistory.com
pywinauto은 아이콘이나 메뉴바 등의 객체로 접근하여 클릭 드으이 이벤트를 발생하는 것인데, 응용 프로그램에서의 객체 정보를 알기 위해선 print_control_identifiers()함수로 사전에 일일이 현재 응용 프로그램 화 상태의 객체 정보를 출력해줘야 한다. 출력 결과는 텍스트 형태로 알아보기 힘든 어려운 트리 형태로 제공되며, 가장 큰 문제점은 이벤트 발생으로 응용 프로그램 화면이 바뀌면 다시 print_control_identifiers() 함수로 새로운 객체 정보를 출력해야 한다.
예시)
- 프로그램을 실행하고 프로그램의 첫 화면의 객체 정보 읽기
from pywinauto.application import Application
from pywinauto import findwindows
app = Application(backend='uia').start("C:\\ProgramFiles(x86)\\RC mania\\RCMania.exe")
dlg = app['CNC - RC Mania']
dlg.print_control_identifiers()
2. 출력으로부터 클릭할 버튼의 트리구조 파악
3. 버튼 클릭 명령어 작성
dlg.Pane.Dialog2.GroupBox.RadioButton5.click()
dlg.Pane.Dialog2.Button.click()
아이콘이나 버튼 클릭하는 것 까진 할만한데, 메뉴바에 들어가서 파일 열기 이런거 들어가면 하다가 짜증나서 안하게 된다. 그러니 죄다 예제가 가장 간단한 프로그램인 메모장에 대해서만 테스트를 하는것 같다.
Clicknium
반면, 이 포스트에서 소개하고자 하는 Clicknium은 사용하기 훨씬 쉽다. 매크로짜는 것처럼 마우스와 키보드의 입력을 recording할 수 있기 때문에, pywinauto처럼 일일이 트리 구조를 파악할 필요가 없다. 또한 일련의 과정을 recoding하는 것이 아니라마우스 또는 키보드 입력 행위를 각각 recoding하기 때문에 중간에 실수를 해도 청므부터 다시 recoding할 필요가 없다.
Clicknium은 VS Code 기반으로 작성이 되기 때문에, VS Code를 설치하고 파이썬 구동환경과 연결해주고, VS Code에 Clicknium extension을 설치해야한다. 무료이긴 하지만 Clicknium에 가입한 후 인증을 해야 사용이 가능하다. (이부분이 제일 찝찝하긴 하다) 설치부터 사용하는 방법은 아래 링크의 첫화면에 보이는 4분짜리 동영상에 잘 나타나 있다.
Home | Clicknium
If you're looking for a free automation tool for Python, the best alternative to Selenium or Py-Auto is...
clicknium.com
GUI 객체를 캡처하는 것에 대해 다시 설명하자면,
- Clicknium extension을 설치하고 폴더 및 py 파일을 생성하면 아래와 같이 LOCATORS라는 곳의 Capture를 클릭한다.
2. 그러면 Clicknium Recoder라는 것이 활성화되고 마우스를 객체 근처에 가져가면 노란색으로 하이라이트 된다. 해당 객체를 캡처하기 위해선 Ctrl키를 누른 채 객체를 클릭한다. 그러면 위와 같이 자주색 객체들이 캡쳐된다. (생성되는 locator 이름이 복잡하므로 적절히 짧게 바꿔준다.)
3. 캡처된 객체는 .locator라는 하위 폴더에 이미지와 정보가 저장되는 듯 하다.
RC mania 프로그램을 구동하고, 보.슬래브 모드 선택 → 시작 버튼 클릭 → 열기 클릭 → 입력 파일 이름 입력 → 열기 클릭 → 단면 계산 → 단면 계산 실행 클릭의 일련된 과정을 파이썬 코드로 나태내면 아래와 같다. 프로그래밍이 아니라 그냥 명령어 입력 수준 정도 밖에 안된다.
import subprocess
from clicknium import clicknium as cc, locator, ui
sp = subprocess.Popen("C:\\\\Program Files (x86)\\\\RC Mania\\\\RCMania.exe")
ui(locator.rcmania.beamslab0).click()
ui(locator.rcmania.start1).click()
ui(locator.rcmania.file2).click()
ui(locator.rcmania.file3).click()
ui(locator.rcmania.edit4).set_text("C:\\RCmania\\input.rcb")
ui(locator.rcmania.open5).click()
ui(locator.rcmania.calc6).click()
ui(locator.rcmania.calcrun7).click()
sp.terminate()