일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 벤자민플랭클린
- kotlin
- DART
- androidx
- Flutter
- jetpack compose
- 오픈소스
- 이모지
- ASMR
- 넷플릭스
- 코틀린
- 소울칼리버6
- Streaming
- Coroutine
- Freesound
- FSM
- Linux
- recyclerview
- 명언모음
- 1인개발자
- 장자명언
- 파이썬
- Android
- 공자명언
- 공부집중
- 이모지메모
- Firebase
- 좋은글필사하기
- 명심보감
- bash
Archives
- Today
- Total
Vintage appMaker의 Tech Blog
Python 기반의 RPA(Robotic Process Automation) 본문
Source code or Tip/python
Python 기반의 RPA(Robotic Process Automation)
VintageappMaker 2020. 7. 26. 11:45Python 기반의 RPA(Robotic Process Automation)
자동화 솔루션을 만들 때 Python의 레퍼런스가 제일 많다 . 그러나 대부분 Console 기반이었지만, GUI가 있는 프로그램의 경우도 종종 자동화 솔루션이 제공될 때가 있다. 이 때 사용하는 엔진이 Microsoft에서 제공하는 UI Automation이다.
그리고 이를 기반으로 Python에서 사용할 수 있도록 만든 오픈소스가 있다.
https://github.com/yinkaisheng/Python-UIAutomation-for-Windows
개발환경
- python 3.8
- pycharm
- uiautomation
- pywin32
#!python3
# -*- coding: utf-8 -*-
import time
import ctypes
import uiautomation as auto
import subprocess
# uiautomation as auto는
# Microsoft의 UIAutomation을 python으로 래핑한 것임
# https://github.com/yinkaisheng/Python-UIAutomation-for-Windows
# 위의 주소에서 예제를 활용함.
# zoom이 실행된 상태에서 window에 등록된 클래스를 검색해서 처리한다.
def zoomSearch():
zoom = auto.WindowControl(searchDepth=1, ClassName='ZPPTMainFrmWndClassEx')
if not zoom.Exists(3, 1):
print('Can not find Zoom window')
exit(0)
# print(zoom)
selectByChildTree(zoom)
# window 구조를 보는 Inspector 프로그램의 결과로 child를 찾아가는 방식
# ClassName이 없을 경우, WindowsControle을 찾은 후
# ChildTree를 따라가는 방법이 제일확실함
def selectByChildTree(zoom):
pane = controlTracing(zoom)
# EditControl에서 parameter로 검색추출가능
# 여기서는 EditControl이 하나임.
# MS의 위젯과 매핑한 정보는
# https://docs.microsoft.com/en-us/previous-versions//dd319586(v=vs.85)
editSearch = pane.EditControl()
editSearch.Click()
editSearch.SendKeys('3차 Release 일정회의', 0.05)
time.sleep(1)
pane.EditControl().SendKeys('{enter}')
# 윈도우 컨트롤을 찍어가면서 추적함
def controlTracing(zoom):
# 1번째 차일드 트리
items = zoom.GetChildren()
printControls(items)
# 타이틀바 정보
items = zoom.GetChildren()[0].GetChildren()
printControls(items)
# 클라이언트 영역정보
items = zoom.GetChildren()[1].GetChildren()
printControls(items)
# Tree 구조상 Search 위젯이 있는 곳
pane = zoom.GetChildren()[1].GetChildren()[0].GetChildren()[2]
printControls(pane.GetChildren())
return pane
def printControls(items):
for i in items:
print(i)
def CaculatorShow():
subprocess.Popen('calc.exe')
cal = auto.WindowControl(searchDepth=1, Name='계산기')
if not cal.Exists(3, 1):
print('Can not find Calculator window')
exit(0)
# inspertor로 검색된 ButtonControl의 name의 값을 넣어야 한다.
cmd = ["2", "8", "0", "0", "0", "0","0", "0", "곱하기", "0", "소수 구분 기호", "3", "같음"]
for c in cmd:
cal.ButtonControl(Name=c).Click()
# function table
pFunc = [zoomSearch, CaculatorShow ]
if __name__ == '__main__':
uiLanguage = ctypes.windll.kernel32.GetUserDefaultUILanguage()
for p in pFunc:
p()
https://www.youtube.com/watch?v=P3G-ke3kZUc
'Source code or Tip > python' 카테고리의 다른 글
[github] 파이썬 확장모듈(C++) 만들기 (0) | 2020.12.03 |
---|---|
스크래치 2.0 HTTP Extension 만들기 (0) | 2020.11.10 |
우분투 python에서 ncurses (0) | 2020.11.09 |
python selenium을 이용한 브라우저 제어 (0) | 2020.07.29 |
Microbit 시리얼 통신예제 - 파이썬 연동 (0) | 2020.07.18 |
Comments