Khusus untuk Habr, saya memulai serangkaian artikel tutorial tentang penggunaan platform RPA OpenRPA . Saya akan senang menerima komentar dan komentar Anda jika Anda memiliki pertanyaan. Saya harap cerita ini tidak akan membuat Anda acuh tak acuh.
Sebelumnya saya menulis bahwa OpenRPA adalah platform RPA open source pertama yang memungkinkan Anda untuk sepenuhnya menyingkirkan rekan RPA berbayar. Dan, seperti yang ternyata dalam proses, topik ini memungkinkan tidak hanya untuk menghapus perusahaan dari "jarum lisensi", tetapi juga untuk meningkatkan efek bisnis yang dihasilkan dari robot yang dikembangkan. Bagaimanapun, arsitektur RPA baru ternyata jauh lebih "ringan" dan, sebagai akibatnya, lebih cepat.
Terima kasih kepada semua pembaca yang menunjukkan minat pada artikel saya sebelumnya - Saya sangat menghargai pendapat orang lain, karena inilah yang memungkinkan saya untuk menawarkan solusi yang paling relevan kepada publik. Sekali lagi terima kasih atas minat Anda!
Dalam kerangka artikel ini, instruksi rinci akan diberikan pada pengembangan robot yang akan memanipulasi aplikasi GUI berjendela.
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 , ).
, .
!