pyOpenRPAチュートリアル。ウィンドウ化されたGUIアプリケーションの管理

特にHabrについては、RPAプラットフォームOpenRPAの使用に関する一連のチュートリアル記事を始めています。ご不明な点がございましたら、ご意見・ご感想をお待ちしております。この話であなたが無関心にならないことを願っています。



pyOpenRPAチュートリアル。 ウィンドウ化されたGUIアプリケーションの管理



以前私は、OpenRPAが有料のRPAカウンターパートを完全に取り除くことができる最初のオープンソースRPAプラットフォームであると書いたそして、その過程で判明したように、このトピックにより、「ライセンスニードル」から企業を取り除くだけでなく、開発されたロボットによるビジネス効果を高めることも可能になります。結局のところ、新しいRPAのアーキテクチャははるかに「軽量」であり、結果としてより高速であることがわかりました。



私の以前の記事に関心を示してくれたすべての読者に感謝します。他の人の意見に本当に感謝しています。これにより、最も関連性の高いソリューションを公開することができます。関心をお寄せいただき、誠にありがとうございます。



この記事の枠組みの中で、ウィンドウ化されたGUIアプリケーションを操作するロボットの開発に関する詳細な手順を説明します。



GUI , WEB .



. OpenRPA pyOpenRPA



RPA , : OpenRPA pyOpenRPA.



?



, OpenRPA "", " ". , . pyOpenRPA , RPA - . ( ). , , .



OpenRPA : , , RPA , . open source , , — . RPA , RPA . , ( RPA , ). .





pyOpenRPA — RPA : , . , , .



( ):







, GUI , .



. , , .



?



Notepad_human



?



Notepad_pyOpenRPA





UI — UIO GUI . , , , - .



, , — UIO. UIO, UIO c , . — .







  • hidden — GUI

  • disabled — (, ..)







  • left click —

  • right click —

  • type text —

  • scroll up —

  • scroll down —

  • scroll left —

  • scroll right —



, , , , "" . , , , () . , GUI .



UIO?



UIO — User Interface Object ( pyOpenRPA). , , pywinauto (, ).



, , . , UIO UIO .



UIO (UIOSelector)



UIO — ( UIO). UIO , pyOpenRPA UIO, , UIO. UIO UIO UIO.



, UIO — , 0, 1 n UIO.



— , UIO:



[
    {
        "depth_start" :: [int, start from 1] :: ,     (  1),
        "depth_end" :: [int, start from 1] :: ,     (  1),
        "ctrl_index" || "index" :: [int, starts from 0] ::  UIO     UIO,
        "title" :: [str] ::    *title*   UIO,
        "title_re" :: [str] ::   (python )   UIO,    *title*      ,
        "rich_text" :: [str] ::    *rich_text*   UIO,
        "rich_text_re" :: [str] ::   (python )   UIO,    *rich_text*      ,
        "class_name" :: [str] ::    *class_name*   UIO,
        "class_name_re" :: [str] ::   (python )   UIO,    *class_name*      ,
        "friendly_class_name" :: [str] ::    *friendly_class_name*   UIO,
        "friendly_class_name_re" :: [str] ::   (python )   UIO,    *friendly_class_name*      ,
        "control_type" :: [str] ::    *control_type*   UIO,
        "control_type_re" :: [str] ::   (python )   UIO,    *control_type*      ,
        "is_enabled" :: [bool] :: ,  UIO    ,
        "is_visible" :: [bool] :: ,  UIO   ,
        "backend" :: [str, "win32" || "uia"] ::     UIO (  "win32"). !           UIO .        .
    },
    { ...  UIO    }
]


UIO



[
    {"class_name":"CalcFrame", "backend":"win32"}, #  UIO 1-  
    {"title":"Hex", "depth_start":3, "depth_end": 3} #  UIO 1+3-   (    depth_start|depth_stop,    UIO)
]


PS. UIO UIDesktop (pyOpenRPA/Robot/UIDesktop.py). .

UIDesktop



( )



— pyOpenRPA.



: , "". "", .



0. Python 3 ( pyOpenRPA)



RPA , pyOpenRPA . RPA (, , ), pyOpenRPA , .



pyOpenRPA:



  • 1, . GitLab
  • 2, . pyOpenRPA Python 3 (pip install pyOpenRPA)


1.



, , . . , — GUI .



:



  • "RobotCalc":

    • "RobotCalc_1.py" — 1,
    • "RobotCalc_1_Run_x64.cmd" — 1
    • "RobotCalc_2.py" — 2,
    • "RobotCalc_2_Run_x64.cmd" — 2


.cmd — .



"RobotCalc_1_Run_x64.cmd" ( "RobotCalc_2_Run_x64.cmd" ):



cd %~dp0 
..\Resources\WPy64-3720\python-3.7.2.amd64\python.exe "RobotCalc_1.py"
pause >nul


2. pyOpenRPA UIO



  • (win + r > calc > enter)


pyOpenRPA GitLab ( 1, ):



  • cmd web pyOpenRPA "pyOpenRPA\Studio\pyOpenRPA.Studio_x64.cmd"


pyOpenRPA pip install pyOpenRPA ( 2, ):



  • python : python -m pyOpenRPA.Studio "..\Studio\SettingsStudioExample.py", SettingsStudioExample.py — pyOpenRPA. pyOpenRPA GitLab


5 — 15 . web pyOpenRPA (. )



pyOpenRPA_studio

web pyOpenRPA



  • GUI UI ( "Mouse search")
  • (alt + tab)
  • , , . radio Hex. pyOpenRPA — , UI , .


calc_radiobutton



pyOpenRPA UI



  • , UI ctrl 2-4 , WEB UI , .


pyOpenRPA_studio_calc_ui_hex



pyOpenRPA UI UI ( ctrl)



  • , , , "Highlight" UI , . UI , .



  • UI , UIO (UIO Python 3)





pyOpenRPA_studio_calc_ui_hex_uio



pyOpenRPA UIO UI



  • UI 4- title = "Hex". pyOpenRPA UIO UI . , UI .



  • UIO :



    [{"title":"","class_name":"CalcFrame","backend":"win32"},{"ctrl_index":0},{"ctrl_index":6},{"ctrl_index":1}]


    :





[{"class_name":"CalcFrame","backend":"win32"},{ "title":"Hex", "depth_start":3, "depth_end": 3}]


  • "title":"" , UI . "title":"Hex" "depth_start":3, "depth_end": 3 ( , ). "class_name" , class_name = CalcFrame, backend pyOpenRPA, UI (win32 uia, + -)
  • "Hightlight element" , UI , -, pyOpenRPA ( UI — UIO )


  • UIO : UI , . UI , , . , UI UIO pyOpenRPA.Robot.UIDesktop.UIOSelector_Exist_Bool



    lCalcHex_IsExistBool = UIDesktop.UIOSelector_Exist_Bool(inUIOSelector=[{"class_name":"CalcFrame","backend":"win32"},{ "title":"Hex", "depth_start":3, "depth_end": 3}]) #   UI   UIO 


  • , , win32 — , (. ).





Calc Vid Programmist



""



menu_select UIO GUI .



  • pyOpenRPA UIO



    lUIOSelectorCalculator = [{"title":"","class_name":"CalcFrame","backend":"win32"}] #  UIO    pyOpenRPA


  • UIO UIO , menu_select,



    lUIOCalculator = UIDesktop.UIOSelector_Get_UIO(inSpecificationList=lUIOSelectorCalculator) #  UIO 
    lUIOCalculator.menu_select("& -> &") #    




3.



UIO , . RobotCalc_1.py , (python.exe "RobotCalc_1.py") c .



from pyOpenRPA.Robot import UIDesktop #  ,    UI  GUI 
import time #   
import os #   ,   ,   
lUIOSelectorCalculator = [{"title":"","class_name":"CalcFrame","backend":"win32"}] #  UIO    pyOpenRPA
while True: #  
    lUIOCalculator = UIDesktop.UIOSelector_Get_UIO(inSpecificationList=lUIOSelectorCalculator) #  UIO 
    lCalcHex_IsExistBool = UIDesktop.UIOSelector_Exist_Bool(inUIOSelector=[{"class_name":"CalcFrame","backend":"win32"},{ "title":"Hex", "depth_start":3, "depth_end": 3}]) #   UI   UIO 
    if not lCalcHex_IsExistBool: # ,  UI  
        lUIOCalculator.menu_select("& -> &") #    
    time.sleep(1) #    1 .,      


! , . . , 1 .



. , ( ), ( )



  • UIO . , .



  • os.system





os.system("calc") #  


  • ( ) is_minimized


lUIOCalculator.is_minimized()


  • restore


lUIOCalculator.restore() #      


  • ( RobotCalc_2.py).


from pyOpenRPA.Robot import UIDesktop #  ,    UI  GUI 
import time #   
import os #   ,   ,   
lUIOSelectorCalculator = [{"title":"","class_name":"CalcFrame","backend":"win32"}] #  UIO    pyOpenRPA
while True: #  
    lExistBool = UIDesktop.UIOSelector_Exist_Bool(inUIOSelector=lUIOSelectorCalculator) #     UIO 
    if not lExistBool: #    
        os.system("calc") #  
    else: # ,     
        lUIOCalculator = UIDesktop.UIOSelector_Get_UIO(inSpecificationList=lUIOSelectorCalculator) #  UIO 
        if lUIOCalculator.is_minimized(): # ,      
            lUIOCalculator.restore() #      
        else:
            lCalcHex_IsExistBool = UIDesktop.UIOSelector_Exist_Bool(inUIOSelector=[{"class_name":"CalcFrame","backend":"win32"},{ "title":"Hex", "depth_start":3, "depth_end": 3}]) #   UI   UIO 
            if not lCalcHex_IsExistBool: # ,  UI  
                lUIOCalculator.menu_select("& -> &") #    
    time.sleep(1) #    1 .,      


PS 1. : RPA 3-4 ( ).



PS 2. UIDesktop (pyOpenRPA/Robot/UIDesktop.py)

UIDesktop





, . , . - "" (, , web ).



, , , . , RPA (, RPA , ).



, .



!




All Articles