特にHabrについては、RPAプラットフォームOpenRPAの使用に関する一連のチュートリアル記事を始めています。ご不明な点がございましたら、ご意見・ご感想をお待ちしております。この話であなたが無関心にならないことを願っています。
以前私は、OpenRPAが有料のRPAカウンターパートを完全に取り除くことができる最初のオープンソースRPAプラットフォームであると書いた。そして、その過程で判明したように、このトピックにより、「ライセンスニードル」から企業を取り除くだけでなく、開発されたロボットによるビジネス効果を高めることも可能になります。結局のところ、新しいRPAのアーキテクチャははるかに「軽量」であり、結果としてより高速であることがわかりました。
私の以前の記事に関心を示してくれたすべての読者に感謝します。他の人の意見に本当に感謝しています。これにより、最も関連性の高いソリューションを公開することができます。関心をお寄せいただき、誠にありがとうございます。
この記事の枠組みの中で、ウィンドウ化されたGUIアプリケーションを操作するロボットの開発に関する詳細な手順を説明します。
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 , ).
, .
!