Especialmente para Habr, estou iniciando uma série de artigos tutoriais sobre o uso da plataforma RPA OpenRPA . Eu ficaria feliz em receber seus comentários e observações se você tiver alguma dúvida. Espero que esta história não o deixe indiferente.
Escrevi anteriormente que o OpenRPA é a primeira plataforma RPA de código aberto que permite que você se livre completamente de contrapartes pagas da RPA. E, como resultou no processo, esse tópico possibilita não apenas remover as empresas da "agulha de licenciamento", mas também aumentar os efeitos comerciais resultantes dos robôs desenvolvidos. Afinal, a arquitetura do novo RPA acabou sendo muito "mais leve" e, como resultado, mais rápida.
Obrigado a todos os leitores que demonstraram interesse no meu artigo anterior - eu realmente aprecio as opiniões dos outros, porque é isso que me permite oferecer ao público as soluções mais relevantes. Obrigado novamente por seu interesse!
Na estrutura deste artigo, serão fornecidas instruções detalhadas sobre o desenvolvimento de um robô que manipulará aplicativos da GUI em janelas.
GUI , WEB .
. 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 , ).
, .
!