特别是对于Habr,我正在开始一系列有关使用RPA平台OpenRPA的教程文章。如有任何疑问,我们将很高兴收到您的评论和评论。我希望这个故事不会让您无动于衷。
早些时候,我写道OpenRPA是第一个开源RPA平台,它使您可以完全摆脱付费RPA对手。而且,正如在该过程中发现的那样,该主题不仅使从“授权针”中删除公司成为可能,而且还可以从已开发的机器人中获得更大的业务收益。毕竟,新RPA的体系结构“更轻”,因此速度更快。
感谢所有对我的上一篇文章感兴趣的读者-我真的很感谢其他人的意见,因为这使我能够为公众提供最相关的解决方案。再次感谢您的关注!
在本文的框架内,将给出有关开发可操纵窗口化GUI应用程序的机器人的详细说明。
窗口应用程序应理解为未在WEB浏览器中呈现的所有类型的GUI应用程序。
备注。OpenRPA现在是pyOpenRPA
自从上一篇文章发表以来,RPA平台的名称进行了较小的更改,即:OpenRPA重命名为pyOpenRPA。
这是什么原因呢?
, OpenRPA "", " ". , . pyOpenRPA , RPA - . ( ). , , .
OpenRPA : , , RPA , . open source , , — . RPA , RPA . , ( RPA , ). .
pyOpenRPA — RPA : , . , , .
( ):
- RPA OpenSource (pyOpenRPA)
- >> pyOpenRPA . GUI
- pyOpenRPA . WEB (, Chrome, Firefox, Opera)
- pyOpenRPA . &
- pyOpenRPA .
, GUI , .
. , , .
?
?
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 , .
- 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 (. )
web pyOpenRPA
- GUI UI ( "Mouse search")
- (alt + tab)
- , , . radio Hex. pyOpenRPA — , UI , .
pyOpenRPA UI
- , UI ctrl 2-4 , WEB UI , .
pyOpenRPA UI UI ( ctrl)
, , , "Highlight" UI , . UI , .
UI , UIO (UIO Python 3)
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 — , (. ).
""
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 , ).
, .
!