pyOpenRPA教程。管理窗口化GUI应用程序

特别是对于Habr,我正在开始一系列有关使用RPA平台OpenRPA的教程文章如有任何疑问,我们将很高兴收到您的评论和评论。我希望这个故事不会让您无动于衷。



pyOpenRPA教程。 管理窗口化GUI应用程序



早些时候,我写道OpenRPA是第一个开源RPA平台,它使您可以完全摆脱付费RPA对手。而且,正如在该过程中发现的那样,该主题不仅使从“授权针”中删除公司成为可能,而且还可以从已开发的机器人中获得更大的业务收益。毕竟,新RPA的体系结构“更轻”,因此速度更快。



感谢所有对我的上一篇文章感兴趣的读者-我真的很感谢其他人的意见,因为这使我能够为公众提供最相关的解决方案。再次感谢您的关注!



在本文的框架内,将给出有关开发可操纵窗口化GUI应用程序的机器人的详细说明。



窗口应用程序应理解为未在WEB浏览器中呈现的所有类型的GUI应用程序。



备注。OpenRPA现在是pyOpenRPA



自从上一篇文章发表以来,RPA平台的名称进行了较小的更改,即:OpenRPA重命名为pyOpenRPA。



这是什么原因呢?



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



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





pyOpenRPA — RPA : , . , , .



( ):







, GUI , .



. , , .



?



记事本



?



记事本_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程序员



""



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