تعمل أتمتة العمليات الروبوتية (RPA)، مثل العمال البشريين، على أتمتة المهام من خلال البرامج أو أنظمة الأجهزة التي تعمل عبر مجموعة متنوعة من التطبيقات. يمكن للبرامج أو الروبوتات تعلم سير العمل من خلال خطوات وتطبيقات متعددة، مثل الحصول على النماذج المستلمة، وإرسال رسائل الإقرار، والتحقق من سلامة النموذج، وحفظ النماذج في المجلدات، وتحديث جداول البيانات باسم النموذج، وانتظار تاريخ الإرسال. تم تصميم برنامج RPA لتخفيف عبء إكمال المهام المتكررة والبسيطة على الموظفين.
يرجى التأكد من تثبيت العميل المقابل على الكمبيوتر المحلي، وبدء تشغيل كل من rpa-client
rpa-server
.
النظام الحالي يدعم العملاء التاليين:
معرف التطبيق | اسم |
---|---|
com.wechat | وي شات |
com.wecom | المؤسسة WeChat |
ف ف | تينسنت ف ف |
تيم | تيم |
dingtalk | دينغ توك |
قبرة | فيشو |
نظرًا لأنه يجب تنفيذ المهام بواسطة مستخدم محدد، فأنت بحاجة إلى التأكد من وجود المستخدم قبل تنفيذ المهمة.
http://<host>:<port>/users
POST
JSON
Body
ملكية | يكتب | مطلوب | وصف |
---|---|---|---|
المستخدمين | مستخدم[] | مطلوب | مجموعة من كائنات المستخدم. |
└معرف | خيط | خياري | معرف المستخدم. عندما يكون فارغًا، سيقوم الخادم تلقائيًا بإنشاء معرف. |
└معرف التطبيق | خيط | مطلوب | معرف التطبيق المرتبط |
└الحساب | خيط | مطلوب | حساب المستخدم، يستخدم لمطابقة العملاء. |
└ اللقب | خيط | خياري | لقب المستخدم، يستخدم للعرض. |
└ الاسم الحقيقي | خيط | خياري | يتم استخدام الاسم الحقيقي للمستخدم للعرض. |
└الشركة | خيط | خياري | يتم استخدام اسم الشركة التي ينتمي إليها المستخدم للعرض. |
لاحظ أن عميل
企业微信
لا يمكنه الحصول مباشرةaccount
الشخص الذي قام بتسجيل الدخول حاليًا، تتم مطابقة العميل من خلال مجموعة${realname}_${company}
.
مثال الواجهة:
curl -X POST --location " http://localhost:8080/users "
-H " Content-Type: application/json "
-d " {
" users " : [
{
" id " : " uid " ,
" appId " : " wechat " ,
" account " : " account " ,
" nickname " : " nickname "
}
]
} "
insert into user (id, app_id, account, nickname, realname, company, status, created_time, updated_time)
values ( ' uid ' , ' wechat ' , ' account ' , ' nickname ' , ' realname ' , ' company ' , 1 , now(), null );
http://<host>:<port>/tasks
POST
JSON
Body
ملكية | يكتب | مطلوب | وصف |
---|---|---|---|
المهام | مهمة[] | مطلوب | مجموعة من كائنات المهمة. |
└معرف | خيط | خياري | معرف المهمة. عندما يكون فارغًا، سيقوم الخادم تلقائيًا بإنشاء معرف. |
└ معرف المستخدم | خيط | مطلوب | معرف المستخدم المرتبط |
└ اكتب | خيط | مطلوب | نوع المهمة، راجع جدول قاموس نوع المهمة. |
└ الأولوية | عدد صحيح | خياري | أولوية المهمة، كلما كانت القيمة أصغر، زادت الأولوية. عندما تكون فارغة، يتم استخدام الأولوية الافتراضية التي تم تكوينها. |
└ البيانات | خيط | خياري | بيانات المهمة بتنسيق سلسلة JSON . |
└ الجدول الزمني | التاريخ والوقت | خياري | وقت تنفيذ المهمة، على سبيل المثال: 2022-01-01 10:00:00 . إذا كانت فارغة، سيتم تنفيذها على الفور. |
مثال:
curl -X PATCH --location " http://localhost:8080/tasks "
-H " Content-Type: application/json "
-d " {
" tasks " : [
{
" id " : " tid " ,
" userId " : " uid " ,
" type " : " login " ,
" priority " : " 0 " ,
" data " : "" ,
" scheduleTime " : " 2022-01-01 10:00:00 " ,
}
]
} "
insert into task (id, user_id, app_id, type, priority, data, status, created_time, updated_time, schedule_time)
values ( ' tid ' , ' uid ' , ' wechat ' , ' login ' , 0 , null , 0 , now(), null , ' 2022-01-01 10:00:00 ' );
يوفر الخادم صفحة اختبار وقت التشغيل التي يمكن للمطورين استخدامها لاختبار المهام البسيطة محليًا. افتح المتصفح وقم بزيارة http://<host>:<port>/index.html
ثم حدد العميل الذي سيتم اختباره.
لا توجد معلمات مطلوبة لتسجيل الدخول إلى العميل
لا توجد معلمات مطلوبة لتسجيل الخروج من العميل
تنسيق المعلمة:
ملكية | يكتب | مطلوب | وصف |
---|---|---|---|
هدف | خيط | مطلوب | إرسال الكائن. |
رسائل | رسالة[] | مطلوب | مجموعة من كائنات الرسالة. |
└ اكتب | خيط | مطلوب | نوع الرسالة. |
└ المحتوى | خيط | مطلوب | محتوى الرسالة أو محتوى النص أو عنوان الملف. |
نوع الرسالة:
شفرة | اسم | وصف |
---|---|---|
نص | نص | نص |
صورة | صورة | صورة |
فيديو | فيديو | فيديو |
ملف | ملف | وثيقة |
مثال المعلمة:
{
"target" : " friend " ,
"messages" : [
{
"type" : " text " ,
"content" : " message "
},
{
"type" : " image " ,
"content" : " https://rpa.leego.io/image.png "
},
{
"type" : " video " ,
"content" : " https://rpa.leego.io/video.mp4 "
},
{
"type" : " file " ,
"content" : " https://rpa.leego.io/file.zip "
}
]
}
تنسيق المعلمة:
ملكية | يكتب | مطلوب | وصف |
---|---|---|---|
هدف | خيط | مطلوب | اسم المجموعة. |
رسائل | رسالة[] | مطلوب | مجموعة من كائنات الرسالة. |
└ اكتب | خيط | مطلوب | نوع الرسالة. |
└ المحتوى | خيط | مطلوب | محتوى الرسالة أو محتوى النص أو عنوان الملف. |
نوع الرسالة:
شفرة | اسم | وصف |
---|---|---|
نص | نص | نص |
صورة | صورة | صورة |
فيديو | فيديو | فيديو |
ملف | ملف | وثيقة |
يذكر | يذكر | يتذكر |
مثال المعلمة:
{
"target" : " group " ,
"messages" : [
{
"type" : " text " ,
"content" : " message "
},
{
"type" : " image " ,
"content" : " https://rpa.leego.io/image.png "
},
{
"type" : " video " ,
"content" : " https://rpa.leego.io/video.mp4 "
},
{
"type" : " file " ,
"content" : " https://rpa.leego.io/file.zip "
},
{
"type" : " mention " ,
"content" : " member "
}
]
}
لا توجد معلمات مطلوبة لتسجيل الدخول إلى العميل
لا توجد معلمات مطلوبة لتسجيل الخروج من العميل
تنسيق المعلمة:
ملكية | يكتب | مطلوب | وصف |
---|---|---|---|
هدف | خيط | مطلوب | إرسال الكائن. |
رسائل | رسالة[] | مطلوب | مجموعة من كائنات الرسالة. |
└ اكتب | خيط | مطلوب | نوع الرسالة. |
└ المحتوى | خيط | مطلوب | محتوى الرسالة أو محتوى النص أو عنوان الملف. |
نوع الرسالة:
شفرة | اسم | وصف |
---|---|---|
نص | نص | نص |
صورة | صورة | صورة |
فيديو | فيديو | فيديو |
ملف | ملف | وثيقة |
مثال المعلمة:
{
"target" : " friend " ,
"messages" : [
{
"type" : " text " ,
"content" : " message "
},
{
"type" : " image " ,
"content" : " https://rpa.leego.io/image.png "
},
{
"type" : " video " ,
"content" : " https://rpa.leego.io/video.mp4 "
},
{
"type" : " file " ,
"content" : " https://rpa.leego.io/file.zip "
}
]
}
تنسيق المعلمة:
ملكية | يكتب | مطلوب | وصف |
---|---|---|---|
هدف | خيط | مطلوب | اسم المجموعة. |
رسائل | رسالة[] | مطلوب | مجموعة من كائنات الرسالة. |
└ اكتب | خيط | مطلوب | نوع الرسالة. |
└ المحتوى | خيط | مطلوب | محتوى الرسالة أو محتوى النص أو عنوان الملف. |
نوع الرسالة:
شفرة | اسم | وصف |
---|---|---|
نص | نص | نص |
صورة | صورة | صورة |
فيديو | فيديو | فيديو |
ملف | ملف | وثيقة |
يذكر | يذكر | يتذكر |
مثال المعلمة:
{
"target" : " group " ,
"messages" : [
{
"type" : " text " ,
"content" : " message "
},
{
"type" : " image " ,
"content" : " https://rpa.leego.io/image.png "
},
{
"type" : " video " ,
"content" : " https://rpa.leego.io/video.mp4 "
},
{
"type" : " file " ,
"content" : " https://rpa.leego.io/file.zip "
},
{
"type" : " mention " ,
"content" : " member "
}
]
}
تنسيق المعلمة:
ملكية | يكتب | مطلوب | وصف |
---|---|---|---|
هدف | خيط | مطلوب | اسم المجموعة. |
اتصالات | اتصال[] | مطلوب | مجموعة من كائنات الاتصال. |
└ الهدف | خيط | مطلوب | رقم الهاتف المحمول أو عنوان البريد الإلكتروني للمستخدم. |
└ السبب | خيط | خياري | إضافة ملاحظات جهة الاتصال. |
مثال المعلمة:
{
"contacts" : [
{ "target" : " phone " },
{ "target" : " email " , "reason" : " reason " }
]
}
متقدمة جدًا للعرض.
من أجل منع بدء تشغيل العميل عدة مرات، عادةً ما يقوم المطورون بإنشاء كائنات كائن المزامنة (mutex). كائن المزامنة (mutex) عبارة عن آلية تستخدم في البرمجة متعددة الخيوط لحماية الموارد المشتركة من الوصول إليها بواسطة سلاسل رسائل أو عمليات متعددة في نفس الوقت.
HANDLE CreateMutexA (
[in, optional] LPSECURITY_ATTRIBUTES lpMutexAttributes,
[in] BOOL bInitialOwner,
[in, optional] LPCSTR lpName
);
[in, optional] lpMutexAttributes
مؤشر إلى بنية SECURITY_ATTRIBUTES. إذا كانت هذه المعلمة NULL
، فلا يمكن وراثة المقبض عن طريق العمليات الفرعية.
يحدد عضو lpSecurityDescriptor
في البنية واصف الأمان لكائن المزامنة الجديد. إذا كانت قيمة lpMutexAttributes
NULL
، فسيحصل كائن المزامنة على واصف أمان افتراضي. تأتي قائمة التحكم ACL
الموجودة في واصف الأمان الافتراضي لكائن المزامنة من الرمز المميز الأساسي أو رمز الانتحال الخاص بالمنشئ.
[in] bInitialOwner
إذا كانت هذه القيمة TRUE
وقام المتصل بإنشاء كائن المزامنة (mutex)، فإن مؤشر ترابط الاستدعاء يأخذ الملكية الأولية لكائن المزامنة (mutex). وبخلاف ذلك، لن يحصل مؤشر ترابط الاستدعاء على ملكية قفل كائن المزامنة (mutex lock). لتحديد ما إذا كان المتصل قد قام بإنشاء كائن المزامنة (mutex)، راجع قسم قيم الإرجاع.
[in, optional] lpName
اسم كائن mutex. يقتصر الاسم على MAX_PATH
من الأحرف. تعتبر مقارنات الأسماء حساسة لحالة الأحرف.
إذا كان lpName
يطابق اسم كائن المزامنة المسمى الموجود، فإن هذه الوظيفة تطلب الوصول إلى MUTEX_ALL_ACCESS
. في هذه الحالة، يتم تجاهل المعلمة bInitialOwner
لأنه تم تعيينها بالفعل بواسطة عملية الإنشاء. إذا لم تكن المعلمة lpMutexAttributes
فارغة، فإنها تحدد ما إذا كان من الممكن توريث المقبض، ولكن يتم تجاهل عضو واصف الأمان الخاص به.
إذا كانت lpName
NULL
، فسيتم إنشاء كائن المزامنة بدون اسم.
إذا تطابق lpName
مع اسم حدث موجود أو إشارة أو مؤقت انتظار أو مهمة أو كائن تعيين ملف، فستفشل الوظيفة وترجع الدالة GetLastError ERROR_INVALID_HANDLE
. وذلك لأن هذه الكائنات تشترك في نفس مساحة الاسم.
يمكن أن يحتوي الاسم على بادئة "عامة" أو "محلية" لإنشاء الكائن بشكل صريح في مساحة الاسم العامة أو مساحة الاسم للجلسة. يمكن أن يحتوي باقي الاسم على أية أحرف باستثناء حرف الخط المائل العكسي (). لمزيد من المعلومات، راجع مساحة اسم كائن Kernel. استخدم جلسات الخدمات الطرفية للتبديل السريع بين المستخدمين. يجب أن تتبع أسماء كائنات Kernel الإرشادات الموضحة للخدمات الطرفية حتى تتمكن التطبيقات من دعم عدة مستخدمين.
يمكن إنشاء الكائن في مساحة اسم خاصة. لمزيد من المعلومات، راجع مساحات أسماء الكائنات.
إذا نجحت الوظيفة، فإن القيمة المرجعة هي المقبض (المقبض) لكائن المزامنة الذي تم إنشاؤه حديثًا.
إذا فشلت الدالة، فإن القيمة المرجعة هي NULL
. للحصول على معلومات الخطأ الموسعة، قم باستدعاء الدالة GetLastError.
إذا كان كائن المزامنة (mutex) عبارة عن كائن مزامنة مسمى وكان الكائن موجودًا قبل استدعاء هذه الوظيفة، فإن قيمة الإرجاع هي مؤشر للكائن الموجود وترجع الدالة GetLastError ERROR_ALREADY_EXISTS
.
Process Explorer هي أداة مقدمة رسميًا من Microsoft لاكتشاف معلومات Handle
و DLL
التي قامت العملية بفتحها أو تحميلها.
الصفحة الرسمية لمستكشف العمليات: https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
مثال:
لنأخذ WeChat كمثال، ابدأ تشغيل WeChat أولاً، وابحث عن العملية المسماة WeChat.exe
في الواجهة الرئيسية لـ Process Explorer وحدِّدها.
ثم ابحث عن Handle
الذي يحتوي على Type
Mutant
Name
Sessions1BaseNamedObjects_WeChat_App_Instance_Identity_Mutex_Name
في واجهة Lower Pane
.
بعد النقر بزر الماوس الأيمن فوق Close Handle
لإغلاق المقبض، يمكنك بدء عملية جديدة.
handles = handler . find_handles ( process_ids = [ 10000 ], handle_names = [ r'Sessions1BaseNamedObjects_WeChat_App_Instance_Identity_Mutex_Name' ])
handler . close_handles ( handles )
كود المصدر المرجعي:client/handler/handler.py
tscon
عند استخدام Remote Desktop للاتصال بكمبيوتر بعيد، يؤدي إغلاق Remote Desktop إلى قفل الكمبيوتر وعرض شاشة تسجيل الدخول. في وضع التأمين، لا يحتوي الكمبيوتر على GUI
، لذا ستفشل أي اختبارات GUI
قيد التشغيل أو مجدولة حاليًا.
لتجنب مشاكل اختبار GUI
، يمكنك استخدام الأداة المساعدة tscon
لقطع الاتصال بسطح المكتب البعيد. يقوم tscon
بإرجاع التحكم إلى الجلسة المحلية الأصلية على الكمبيوتر البعيد، متجاوزًا شاشة تسجيل الدخول. تستمر كافة البرامج الموجودة على الكمبيوتر البعيد في العمل بشكل طبيعي، بما في ذلك اختبار GUI
.
tscon
؟ tscon
هي أداة توفرها أنظمة Windows ويمكن استخدامها للاتصال بجلسة أخرى على خادم Remote Desktop Session Host.
tscon
؟ tscon { < sessionID > | < sessionname > } [/dest: < sessionname > ] [/password: < pw > | /password: * ] [/v]
المعلمة | يصف |
---|---|
<sessionID> | يحدد معرف الجلسة المراد الاتصال بها. إذا تم استخدام المعلمة /dest:<sessionname> الاختيارية، فيمكن أيضًا تحديد اسم الجلسة الحالية. |
<sessionname> | حدد اسم الجلسة المراد الاتصال بها. |
/ الوجهة: <sessionname> | يحدد اسم الجلسة الحالية. عند الاتصال بجلسة عمل جديدة، سيتم قطع اتصال هذه الجلسة. يمكنك أيضًا استخدام هذه المعلمة لتوصيل جلسة مستخدم آخر بجلسة مختلفة. |
/ كلمة المرور: <pw> | حدد كلمة المرور للمستخدم الذي يملك الجلسة للاتصال بها. كلمة المرور هذه مطلوبة عندما لا يملك المستخدم المتصل الجلسة. |
/كلمة المرور: * | اطلب كلمة المرور الخاصة بالمستخدم الذي يملك الجلسة التي تريد الاتصال بها. |
/الخامس | عرض معلومات حول العملية التي يتم تنفيذها. |
/؟ | عرض المساعدة في موجه الأوامر. |
لقطع الاتصال بسطح مكتب بعيد، قم بتشغيل الأمر التالي على الكمبيوتر البعيد (في نافذة Remote Desktop Connection) كمسؤول، على سبيل المثال، من سطر الأوامر:
%windir% S ystem32 t scon.exe RDP-Tcp# # # NNN /dest:console
حيث RDP-Tcp### NNN
هو ID
جلسة سطح المكتب البعيد الحالية، مثل RDP-Tcp#5
. يمكنك رؤيته في عمود الجلسة في علامة التبويب "المستخدمون" في "إدارة مهام Windows" .
ستظهر لك الرسالة انتهت جلسة خدمات سطح المكتب البعيد وسيتم إغلاق عميل سطح المكتب البعيد. ومع ذلك، ستستمر كافة البرامج والاختبارات الموجودة على الكمبيوتر البعيد في العمل بشكل طبيعي.
نصيحة: يكون عمود الجلسة مخفيًا بشكل افتراضي. لعرضه، انقر بزر الماوس الأيمن في مكان ما في الصف الذي يعرض وحدة المعالجة المركزية والذاكرة وما إلى ذلك وحدد جلسة في قائمة السياق التي تفتح.
يمكنك استخدام ملف دفعي لأتمتة عملية قطع الاتصال. على الكمبيوتر البعيد، قم بما يلي:
for /f " skip=1 tokens=3 " %%s in ( ' query user %USERNAME% ' ) do (
%windir% S ystem32 t scon.exe %%s /dest:console
)
يحافظ tscon
على إلغاء قفل الكمبيوتر البعيد، مما يقلل من أمان النظام. بعد اكتمال التشغيل التجريبي، يمكنك قفل الجهاز باستخدام الأمر التالي:
Rundll32.exe user32.dll, LockWorkStation
إذا كانت عملية rdpclip.exe
قيد التشغيل على الكمبيوتر البعيد ولم تكن الحافظة فارغة عند قطع الاتصال بجلسة العمل البعيدة، فقد تفشل عملية rdpclip.exe
.
لتجنب هذه المشكلة، يمكنك إيقاف عملية rdpclip.exe
قبل قطع اتصال الجلسة.
إذا كنت بحاجة إلى توسيع وظائف التشغيل الآلي أو التوافق مع عملاء من إصدارات مختلفة، فيمكنك إضافة البرامج النصية للمهام أو تحريرها في وحدة rpa-client/app.
يتم استخدام الطريقتين التاليتين بشكل أساسي في المشروع:
com.pywinauto
هي وحدة بايثون لأتمتة واجهة المستخدم الرسومية لنظام التشغيل Microsoft Windows. في أبسط الحالات، يسمح لك بإرسال عمليات الماوس ولوحة المفاتيح إلى مربعات الحوار وعناصر التحكم في Windows، ولكنه يدعم العمليات الأكثر تعقيدًا، مثل الحصول على البيانات النصية.
إيرتيست
إنه إطار اختبار لأتمتة واجهة المستخدم قائم على التعرف على الصور تم إطلاقه بواسطة NetEase Games وهو مناسب للألعاب والتطبيقات والأنظمة الأساسية المدعومة هي Windows وAndroid وiOS.
يرجى التأكد من أن نظام التشغيل الذي تستخدمه هو Windows 7 وما فوق، وأن إصدار Python هو 3.7.0 وما فوق.
تجدر الإشارة إلى أن الإصدار الحالي من airtest يعتمد على pywinauto==0.6.3
، ويتطلب المشروع الحالي pywinauto==0.6.8
. يرجى إضافة المعلمة --no-deps
عند تثبيت التبعيات، أو تنفيذ pip install pywinauto==0.6.8
يدويًا pip install pywinauto==0.6.8
.
git clone https://github.com/yihleego/robotic-process-automation.git
cd robotic-process-automation/rpa-client
pip install --no-deps -r requirements.txt
يوجد ملف تكوين العميل في rpa-client/config.yml، ويمكن للمطورين تعديل التكوين وفقًا للسيناريوهات الفعلية.
ملكية | وصف | تقصير |
---|---|---|
server.host | مضيف الخادم | مضيف محلي |
server.port | منفذ الخادم | 18888 |
مسار الخادم | مسار الخادم | /rpa |
server.ssl | ما إذا كان سيتم تمكين SSL | خطأ شنيع |
حجم التطبيق | الحد الأقصى لعدد البرامج التي يمكن تشغيلها | 32 |
<appid> | مسار البرنامج المخصص | الحصول على من التسجيل |
airtest.cvstrategy | خوارزمية التعرف على الصور | [تبل، غربلة، سريع] |
airtest.timeout | خوارزمية التعرف على الصور | 20 ثانية |
airtest.timeout-tmp | خوارزمية التعرف على الصور | 3 ثواني |
مستوى التسجيل | مستوى السجل | تصحيح |
تسجيل الدخول.تنسيق | تنسيق السجل | التنسيق الافتراضي |
تسجيل الدخول. اسم الملف | اسم ملف السجل | ./logs/rpa-client.log |
فقط قم بتشغيل rpa-client/main.py.
يرجى التأكد من أن إصدار Java الذي تستخدمه هو 17 أو أعلى. تعتمد الخدمة على MySQL وRedis عند التشغيل. يرجى التأكد من تثبيتهما وبدء تشغيلهما قبل نشر الخدمة.
git clone https://github.com/yihleego/robotic-process-automation.git
cd robotic-process-automation/rpa-server
mvn clean install
ملكية | وصف | تقصير |
---|---|---|
Spring.datasource.driver-class-name | مصدر البيانات مدفوعة | com.mysql.cj.jdbc.Driver |
Spring.datasource.url | عنوان URL لمصدر البيانات | jdbc:mysql://localhost:3306/rpa |
Spring.datasource.username | اسم مستخدم مصدر البيانات | |
Spring.datasource.password | كلمة مرور مصدر البيانات | |
Spring.data.redis.host | مضيف ريديس | مضيف محلي |
Spring.data.redis.port | ميناء ريديس | 6379 |
Spring.data.redis.password | كلمة مرور ريديس | |
Spring.data.redis.database | قاعدة بيانات ريديس | 0 |
يمكن تعديل التكوين أعلاه في ملف application.properties.
ملكية | وصف | تقصير |
---|---|---|
rpa.websocket.port | منفذ خدمة WebSocket | 18888 |
rpa.websocket.path | مسار خدمة WebSocket | /rpa |
rpa.websocket.idle-timeout | انتهت مهلة الخمول لخدمة WebSocket | 5 م |
rpa.converter.date-time-pattern | تنسيق التاريخ والوقت العالمي | yyyy-MM-dd HH:mm:ss |
rpa.converter.date-pattern | تنسيق التاريخ العالمي | س س س-ش-ي ي |
rpa.converter.time-pattern | تنسيق التوقيت العالمي | سمو:د:ثث |
rpa.client.cache-key | تنسيق مفتاح ذاكرة التخزين المؤقت للعميل | RPA:العميل: <appid> : <account> |
rpa.client.cache-timeout | انتهت مهلة ذاكرة التخزين المؤقت للعميل | 5 م |
راجع خصائص Rpa للحصول على التفاصيل.
قبل بدء الخدمة، يرجى تنفيذ البرنامج النصي التالي في مثيل MySQL
فقط قم بتشغيل RpaApplication.java.
$(".btn").click();
لتحديد ما إذا كان التطبيق يدعم UIA، يمكنك استخدام برنامج Inspect المقدم رسميًا من Microsoft، والذي يمكن تنزيله من الموقع الرسمي أو هذا المستودع:
في المثال، يستخدم WeChat وضع UiaApp لأنه يتم تنفيذه بناءً على UIA؛ بينما يستخدم Enterprise WeChat وضع AirApp، وهو ما يشبه حقيقة وجود Canvas واحدة فقط في صفحة الويب، حيث يتم رسم جميع العناصر وعرضها من خلال التعليمات البرمجية لذلك لا يمكن تحديد موضعها إلا من خلال التعرف على الصور.
تنزيل حزم Visual C++ القابلة لإعادة التوزيع لبرنامج Visual Studio 2013 https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=40784
يرجى الرجوع إلى: 2#المسألة
هذا المشروع هو للتعلم المرجعي فقط، يرجى عدم استخدامه في بيئة الإنتاج.
هذا المشروع تحت ترخيص MIT راجع ملف الترخيص للحصول على التفاصيل.