RPA/Power Automate Desktop

[Power Automate Desktop] 스케줄 작업으로 자동 실행 (2편)

꼰대 2021. 6. 25. 18:31

1편에 이에 2편을 시작하겠습니다.

2편은 약간 복잡할 수도 있는데 가장 확실한 방법일 수도 있습니다.

내용은 python의 pyautogui를 이용하여 PAD를 실행하고 종료하는 프로그램을 만들고 이를 윈도우 작업 스케줄러에 등록하여 원하는 시간에 작업을 할 수 있는 방법입니다.

 

대략적인 전체 프로세스는 다음과 같습니다.

1. 윈도우 스케줄러에서 원하는 시간이 되면 PAD를 실행하고 배치를 통해 python 프로그램을 실행 시킵니다.

2. python 프로그램에서는 PAD에서 등록된 작업을 선택하여 작업 플로어 창을 활성화 시키고 작업을 시작합니다.

3. PAD의 작업이 끝나면 PAD는 배치를 통해 python 프로그램을 실행시킵니다.

4. python 프로그램에서는 PAD창을 모두 닫습니다.

 

먼저 PAD의 작업 플로어 내용입니다.

내용은 간단합니다. 엑셀 열어서 현재 시간 입력하고 저장하고 종료하는 내용에 추가로 python으로 만든 PAD 종료 프로그램을 만들어 배치로 등록하고 PAD가 이 배치파일을 실행하는 내용입니다.

 

다음으로 python 프로그램 내용입니다.

먼저 PAD 작업 시작하는 내용입니다.

여기서 참고할 사항은 지정한 작업을 마우스 커서 이동하여 실행시키는 부분입니다. 즉, 12.스케줄_python을 더블클릭해야하는데 타이틀 부분을 캡쳐해 이미지로 만들어서 pyautogui.locateOnScreen()를 이용해 찾으려 했는데 생각만큼 잘 안됩니다. 이미지를 못찾습니다.

따라서 어쩔 수 없이 좌표값으로 마우스 이동 시켜서 더블클릭하는 방식으로 구현하였고 이를 위해 실행하고자 하는 작업이 항상 고정된 곳에 위치하도록 잘 조정해야 합니다.

 

파일명 : schedule_start.py


import pyautogui


# PAD 메인창에서 원하는 작업(=흐름)을 실행합니다.
def getScheduleWork():
    try:
        # 현재 실행된 창에서 title이 'Power Automate Desktop'인 창을 가져옵니다.
        pad = pyautogui.getWindowsWithTitle('Power Automate Desktop')[0]

        # PAD창이 활성화 상태가 아니라면 활성화 시킵니다. (맨 앞으로 가져오기)
        if pad.isActive == False:
            pad.activate()

        # PAD창이 최대화가 아니라면 최대화 시킵니다.
        # 이는 마우스 클릭을 좌표값으로 하기 위해서입니다.
        if pad.isMaximized == False:
            pad.maximize()

        # 창 최대화 속도와 마우스 이동 속도가 겹치는 것을 방지하기 위해
        # sleep를 1초 합니다.
        pyautogui.sleep(1)

        # 지정한 작업으로 마우스 커서를 이동시킵니다.
        pyautogui.moveTo(272, 236)

        # 마우스 더블 클릭하여 지정한 작업을 실행합니다.
        pyautogui.doubleClick()
    except Exception as exp:
        print('getScheduleWork error : {0}'.format(exp))


# 선택한 작업을 실행합니다.
def startWork():
    try:
        # 현재 창에서 작업창 이름으로 창을 가져옵니다.
        work = pyautogui.getWindowsWithTitle(
            '12. 스케줄_python | Power Automate Desktop')[0]

        # 작업창이 활성화 상태가 아니라면 활성화합니다.
        if work.isActive == False:
            work.activate()

        # 작업창이 최대화 상태가 아니라면 최대화 합니다.
        if work.isMaximized == False:
            work.maximize()

        # 창 최대화 속도와 F5 키 press 시간이 겹치는 것을 방지하기 위해
        # sleep를 1초 합니다.
        pyautogui.sleep(1)

        # 해당 작업을 실행합니다.
        pyautogui.press('f5')
    except Exception as exp:
        print('startWork error : {0}'.format(exp))


def mouseInfo():
    pyautogui.mouseInfo()


if __name__ == '__main__':
    # PAD창이 열리기까지 시간이 좀 오래 걸려 넉넉히 10초 sleep 합니다.
    # 더 걸릴 수 있습니다. 사전 확인 후 넉넉한 시간을 부여합니다.
    pyautogui.sleep(10)

    # PAD 실행창 가져오기
    getScheduleWork()

    # 작업창이 열리기까지 시간이 좀 오래 걸려 넉넉히 10초 sleep 합니다.
    # 더 걸릴 수 있습니다. 사전 확인 후 넉넉한 시간을 부여합니다.
    pyautogui.sleep(10)

    # 작업 실행
    startWork()

 

다음으로 PAD 창 및 프로그램을 종료하는 내용입니다.

파일명 : schedule_end.py


import pyautogui


# 작업창을 닫습니다.
def closeWorkScreen():
    try:
        # 현재 창에서 작업창 이름으로 창을 가져옵니다. 
        win = pyautogui.getWindowsWithTitle(
            '12. 스케줄_python | Power Automate Desktop')[0]

        # 작업창이 None이 아니라면 작업창을 닫습니다.
        if win is not None:
            win.close()
    except Exception as exp:
        print('closeWorkScreen error : {0}'.format(exp))


# PAD를 종료합니다.
def closePad():
    try:
        # 현재 창에서 PAD창 이름으로 창을 가져옵니다. 
        win = pyautogui.getWindowsWithTitle('Power Automate Desktop')[0]

        # 작업창이 None이 아니라면 PAD창을 종료합니다.
        if win is not None:
            win.close()
    except Exception as exp:
        print('closePad error : {0}'.format(exp))


if __name__ == '__main__':
    # 이전 작업의 마무리 시간이 좀 오래 걸릴 수 있어 5초 sleep 합니다.
    # 더 걸릴 수 있습니다. 사전 확인 후 넉넉한 시간을 부여합니다.
    pyautogui.sleep(5)

    # 작업창을 닫습니다. 변경 사항이 없어 저장 메시지는 안나옵니다.
    closeWorkScreen()

    # 작업창 닫는 시간이 좀 오래 걸릴 수 있어 5초 sleep 합니다.
    # 더 걸릴 수 있습니다. 사전 확인 후 넉넉한 시간을 부여합니다.
    pyautogui.sleep(5)

    # PAD를 종료합니다.
    closePad()

 

다음으로 위 python 프로그램을 실행하는 배치파일 내용입니다.

파일명 : run.bat


@ echo off

cd C:\PythonWorkspace\RPA\PAD
python schedule_start.py

 

다음은 python 프로그램을 실행하는 배치파일입니다.

파일명 : stop.bat


echo off

cd C:\PythonWorkspace\RPA\PAD
python schedule_end.py

 

다음으로 윈도우 작업 스케줄러 등록입니다. 작업 스케줄러는 PAD를 실행하고 파이썬 프로그램을 실행합니다.

제어판 > 관리도구 > 작업 스케줄러를 실행합니다.

 

우측 메뉴 작업 만들기를 클릭하고 구분 가능한 이름을 입력합니다.

 

다음으로 트리거 탭 > 새로 만들기 버튼을 클릭합니다. 매일 작업을 해야하므로 설정에서 매일을 선택해주고 시작하고 싶은 날짜를 선택, 매일 반복 시간을 설정합니다.

 

먼저 PAD를 실행해야 합니다. 다음 동작 탭 > 새로 만들기 버튼을 클릭하고 설정의 프로그램/스크립트에 PAD 실행 파일 경로인 "C:\Program Files (x86)\Power Automate Desktop\PAD.Console.Host.exe" 입력하고 확인을 누릅니다.

 

다음 다시 한번 새로 만들기 버튼을 클릭하고 python 실행 배치 파일인 run.bat를 선택합니다.

 

다음의 조건과 설정 탭은 작업 환경에 맞게 옵션 조절하면 됩니다.

 

모든 작업이 끝났으며 설정한 시간이 되면 작동 확인할 수 있습니다.

반응형