개요
일을 하다가 어떤 응용 프로그램을 이용해서 검색하고 파일을 다운 받는 작업을 진행해야 했다. 정말 단순한 작업인데 해야할 양이 많다 보니 자연스럽게 어떻게 자동화 시킬 수 있을까를 고민하게 되었다. 제일 먼저 떠오른 것이 '매크로'다!
파이썬 매크로를 키워드로 검색해보니 pyautogui가 제일 먼저 떴다. 유튜브로 쉽게 따라할 수 있는 것도 많길래 이것으로 선택했다! 실제로 사용하는데도 굉장히 간단했다!
... 아래의 문제와 만나기전까지는.😨
문제점
그래서 Pyautogui를 이용해서 잘 사용하고 있다가, 이상하게 한 10분? 정도가 지나면 응용프로그램이 응답하지 않는다면서 프로그램이 멈추는 것이다.
딱 위의 사진처럼 되는 경우 다 알지 않는가 ㅎㅎ,, 이것까지는 문제되지 않는다. 다시 껐다 키면 되기 때문이다.
어..? 근데..??? 마우스가 왜 안움직이지....???
마우스가 로딩아이콘으로 바뀌면서 이 상태일 때 파이썬 script로 마우스 제어가 되지 않는 것이다..!
(마우스 로딩이 도는 것 처럼 내 머리도 로딩이 돌았다..😦)
자.... 이것을 어떻게 해결하면 좋을까....
해결법
처음엔 사실 어떻게 해야할지 아무것도 떠오르지 않았다... 구글링 또한 어떻게 검색해야할지 감이 안 왔다...
- pyautogui 응용프로그램 응답없음
- pyautogui 응답없음
- pyautogui 마우스 안움직임
- 등등...
pydirectinput을 써서 해보라니, 아니면 또 다른 제어 모듈을 사용해보기도 했다. 하지만 다 먹히지 않았다....
결국 검색을 해봐도 시원한 답을 얻을 수 없었다.. (내가 검색을 잘 못하는 것도 맞다...)
그래서 바람 한 번 쐬러 나가면서 "어떻게 하면 프로그램 응답없음 상태에서 벗어날 수 있을까?"에 집중을 해봤다.
그 결과 떠오르는 것이.. 프로그램을 새로 키는 것이다..!
이것과 관련된 구글링을 해보니 pywinauto 라는 것을 알게 되었고, 이 모듈을 통해 프로그램을 경로만 지정해주면 실행시킬 수 있다고 했다.!
바로 코드로 살펴보자.
from pywinauto.application import Application
path=r"C:\Program Files (x86)\your_program_dir\program.exe"
Application().start(path)
이런 식으로 바로 실행을 시킬 수 있는 것이다.!
여기서 잊으면 안되는 것이 우리는 마우스가 안 움직이는 상태에서 벗어나는 것이 목적이었다. 내가 예상한대로, 새로 프로그램을 실행시킴으로 프로세스가 전환이 되어서 그런지(사실 정확한 이유는 잘 모르겠다 ㅎㅎ,,) 다시 움직였다!!
결과적으로 이후 로직은 다음과 같다.
- 프로그램 응답없음 상태를 판단하는 코드를 작성
- 응답없음 상태라 판단시 해당 프로그램을 다시 키기.
- 이전 것은 종료하고 새것으로 처음부터 시작.
프로그램의 제어를 하는 것은 pywinauto로 가능하니 관련 예제는 이 곳을 참고 바란다~
마무리
이 문제가 해결되어 정말 다행이었다. 처음에는 정말 막막했는데 머리 좀 식히면서 생각해보니 잘 해결될 문제였다. 사실 더 쉽고 간편한 방법이 있을 수 있다. 하지만 아직 초보인 내 머리로는 이런 무식한 접근이 한계였다... 그래도 해결되었으니 다행이다.
혹여나 더 좋은 방법이나 원리에 대해 아는 것이 있으면 알려주시면 감사하겠습니다..☺️
이상 보고 끝!