자동화 프로그램을 만드려면, 내가 컨트롤하고 싶은 단 하나의 window객체를 찾아내야한다.
그러나, 대부분 프로그램들이 같은 타이틀명, 컨트롤네임을 사용하는 경우가 많아서, 내가 원하는 컨트롤 window를 찾을 수 없거나, 두개이상이 찾아졌다는 에러를 자주 볼 수 있다.
Possible values are:
- class_name Elements with this window class
- class_name_re Elements whose class matches this regular expression
- parent Elements that are children of this
- process Elements running in this process
- title Elements with this text
- title_re Elements whose text matches this regular expression
- top_level_only Top level elements only (default=**True**)
- visible_only Visible elements only (default=**True**)
- enabled_only Enabled elements only (default=False)
- best_match Elements with a title similar to this
- handle The handle of the element to return
- ctrl_index The index of the child element to return
- found_index The index of the filtered out child element to return
- predicate_func A user provided hook for a custom element validation
- active_only Active elements only (default=False)
- control_id Elements with this control id
- control_type Elements with this control type (string; for UIAutomation elements)
- auto_id Elements with this automation id (for UIAutomation elements)
- framework_id Elements with this framework id (for UIAutomation elements)
- backend Back-end name to use while searching (default=None means current active backend)
window 구분 사용 예시 :
1. Control ID를 지정해서 구분
2. Process ID로 구분
3. 정규식 이용해서 이름이 변경되는 타이틀 구분
예) 양쪽에 무슨 글자가 있던, 가운데가 Sublime Text로 써있는 타이틀 window찾기
p_sublime = app.window(title_re=".*Sublime Text.*")
4. 찾을 Control의 Parent 핸들을 지정해서 구분
5. child window 찾기 사용
-
Using found_index=i in search criteria of child_window.
-
Using children() but there is very limited number of filter criteria in 0.6.x (planned for future improvements): class_name, control_type, content_only, title.
-
Using best_match search rules from Getting Started Guide -> How to know magic attribute names (previous chapters are recommended to read as well).
>>>app.Properties.print_control_identifiers()
Control Identifiers:
Dialog - 'Windows NT Properties' (L688, T518, R1065, B1006)
[u'Windows NT PropertiesDialog', u'Dialog', u'Windows NT Properties']
child_window(title="Windows NT Properties", control_type="Window")
| Edit - 'Contains:' (L790, T747, R1036, B770)
| [u'8', 'Edit6', u'Contains:Edit']
| child_window(title="Contains:", auto_id="13087", control_type="Edit")
>>>app.Properties.child_window(title="Contains:", auto_id="13087", control_type="Edit")
6. 작업관리자의 동작 중인 백그라운드프로세스에 떠있는 같은 이름의 좀비 프로세스 없애기
어떤 어플리케이션은 실행할때마다 혹은, pywinauto로 connect할때마다 백그라운드 프로세스가 복사되어 남아버린다.
이러면, 같은 프로세스ID같은 Control ID를 사용하는 window들이 생겨서, 내가 찾는 현재 떠있는 window를 찾지 못한다. (2개이상 찾았다는 error발생)
그래서 pywinauto실행전에, 작업관리자에서 같은 이름의, 내가 실행할 어플리케이션들이 중복되어서 떠있는 것을 작업종료 시켜줘야한다.
예시)
자동화 스크립트에서 자동으로 처리되게 하려면, 어플리케이션 connect전에 이미 동작중인 프로세스가 있는지 확인하고, 있으면 kill해주는 것이 필요하겠다.
'Software coding skill(python, web등)' 카테고리의 다른 글
pywinauto 11 - 열려있는 어플리케이션 확인 (0) | 2020.02.19 |
---|---|
pywinauto 9 - popup menu 팝업메뉴 선택 (0) | 2020.02.17 |
tqdm 사용법 - python 진행률 프로세스바 (4) | 2020.02.15 |
Pandas 1 - csv 데이타 읽고 / 처리 / 추가 / 저장 (0) | 2020.02.13 |
pywinauto 8 - 어플리케이션 인스턴스 생성 (0) | 2020.02.11 |
pywinauto 7 - 안정적인 자동화 (0) | 2020.02.11 |
pywinauto 6 - listview 내 text 읽기/쓰기 (0) | 2020.02.11 |
pywinauto 5 - 32bit / 64bit app 종류별 환경 설정 (0) | 2020.02.11 |