Python/일반

[Python] pywinauto 경로에 띄어쓰기 있는 경우 경로, 이름 지정해서 저장하는법

공부하는 sum 2022. 8. 12. 08:00
728x90

pywinauto로 문서 저장하는 법!
제목은 프린트라고 적긴 했지만 정말 프린트는 아니고, PDF로 저장하는 법이다.

이렇게 창을 띄우기 전까지는 다들 많이 하는 메모장 예제대로 하면 된다. 
여기서 원하는 경로에 해당 파일을 저장하기 위해서 어떻게 하는지 알아보고자 한다. 

1. "다른이름으로 프린터 저장"이 켜져있는 상태에서 엘리먼트 검색 

pywinauto.findwindows.find_elements()​

위 코드대로 실행하면 현재 켜져있는 요소들이 다 나온다.

그 중에서 가장 나중에 실행되고 있는 것은 저렇게 ● 표시가 나타나게 되는데, 바로위의 코드를 실행했으니 당연한 일이다.
우리가 여기서 찾아야 할 것은 바로 그 밑에 있는 "다른 이름으로 프린터 출력 저장" 이다. 
저 요소가 찾아져야 그 이후의 일들을 할 수 있는데, 만약 크롬이 아니고 다른 프로그램이라서 이름이 다르다면?
굳이 같은 이름 찾으려고 노력하지말고 맨 위에 뜬 이름(예.인쇄 등) 으로 실행중인 요소를 찾으면 됨!

2. 해당 요소 연결 및 해당 요소의 컨트롤 가능한 것들 검색

# 엘리먼트 연결 
print_app = Application().connect(title = '다음 이름으로 프린터 출력 저장')
test_print = print_app['다음 이름으로 프린터 출력 저장']

# 해당 엘리먼트내의 식별자 검색
test_print.print_control_identifiers()

connect를 이용해서 다루고자 하는 요소에 연결한 뒤 
해당 요소를 구성하는 identifiers(한국어로 뭔지 모르겠는데, 직역은 식별자인듯)를 검색한다.

 
identifiers는 트리구조로 되어 있어서 웬만해서는 찾기 쉬운 편
우리가 찾고자 하는 것은 파일 이름을 적을 곳이다. 보통은 Edit.블라블라 이렇게 되어 있으니 찾을때 참고하면 좋다.
메모장 예제에서도 메모장 내 입력이 가능한 곳은 Edit으로 되어 있음!

3. 파일이름 적는 곳을 찾았다면, 파일 이름을 넘겨준다

path = r'C:\Users\경로\파일이름.pdf'
test_print.Edit.type_keys(path,with_spaces=True)

위의 경우에는 Edit 밑의 type_keys 에서 입력할 수 있었는데,
여기서 포인트는 !입력하고자 하는 파일 경로에 띄어쓰기가 있는 경우!에 꼭 r-string으로 전달하고, with_spaces를 True로 줘야 인식이 된다는 점이다.
내 경우에는 바탕화면이 바탕^화면 이렇게 되어 있어서 진짜 돌아버리는 줄...

 
저렇게 키를 보내면 바로 입력이 되고, 컨트롤 + s를 눌러서 저장하게 할 수도 있지만 
위에 Edit.type_keys를 찾은 것처럼 print_control_identifiers에서 Button을 검색해서 저장이 있는지 확인 후
 
test_print.child_window(title="저장(&S)", class_name="Button").click()

click을 보내면 된다. 

 

 

그럼 저장 완료~

무슨 인터넷에 pywinauto예제 하면 죄다 메모장밖에 없어서 짜증나서 메모장 아닌 예제로 pywinauto 쓰는 법을 처음부터 쓰려고 했는데, 다른 해야 할 것들이 너무 많아서 포기....pywinauto로 파일 이름 저장 시 띄어쓰기로 애먹고 있는 분들이 계시다면..도움이 되었길..! 

728x90