กระบวนการอัตโนมัติของหุ่นยนต์ (RPA) เช่นเดียวกับพนักงานมนุษย์ ทำให้งานเป็นอัตโนมัติผ่านระบบซอฟต์แวร์หรือฮาร์ดแวร์ที่ทำงานบนแอปพลิเคชันที่หลากหลาย ซอฟต์แวร์หรือบอทสามารถเรียนรู้เวิร์กโฟลว์ที่มีหลายขั้นตอนและแอปพลิเคชัน เช่น การรับแบบฟอร์ม การส่งข้อความรับทราบ การตรวจสอบความสมบูรณ์ของแบบฟอร์ม การยื่นแบบฟอร์มลงในโฟลเดอร์ และการอัปเดตสเปรดชีตด้วยชื่อแบบฟอร์ม การรอวันที่ส่ง ซอฟต์แวร์ RPA ได้รับการออกแบบมาเพื่อแบ่งเบาภาระของพนักงานในการทำงานซ้ำๆ ง่ายๆ
โปรดตรวจสอบให้แน่ใจว่าได้ติดตั้งไคลเอนต์ที่เกี่ยวข้องบนเครื่องคอมพิวเตอร์แล้ว และทั้ง rpa-client
และ rpa-server
ได้เริ่มทำงานแล้ว
ระบบปัจจุบันรองรับไคลเอนต์ต่อไปนี้:
รหัสแอป | ชื่อ |
---|---|
วีแชท | วีแชท |
เรา | องค์กร WeChat |
คิวคิว | เทนเซ็นต์ คิวคิว |
ทิม | ทิม |
dingtalk | ติงทอล์ค |
สนุกสนาน | เฟยซู |
เนื่องจากงานจะต้องดำเนินการโดยผู้ใช้ที่ระบุ คุณต้องแน่ใจว่ามีผู้ใช้อยู่ก่อนที่จะดำเนินการงาน
http://<host>:<port>/users
POST
JSON
Body
คุณสมบัติ | พิมพ์ | ที่จำเป็น | คำอธิบาย |
---|---|---|---|
ผู้ใช้ | ผู้ใช้[] | ที่จำเป็น | อาร์เรย์ของวัตถุผู้ใช้ |
└รหัส | สตริง | ไม่จำเป็น | รหัสผู้ใช้ เมื่อว่างเปล่า เซิร์ฟเวอร์จะสร้าง ID โดยอัตโนมัติ |
└รหัสแอป | สตริง | ที่จำเป็น | AppID ที่เกี่ยวข้อง |
└บัญชี | สตริง | ที่จำเป็น | บัญชีผู้ใช้ ใช้เพื่อจับคู่ลูกค้า |
└ ชื่อเล่น | สตริง | ไม่จำเป็น | ชื่อเล่นของผู้ใช้ที่ใช้สำหรับการแสดงผล |
└ ชื่อจริง | สตริง | ไม่จำเป็น | ใช้ชื่อจริงของผู้ใช้ในการแสดงผล |
└บริษัท | สตริง | ไม่จำเป็น | ชื่อของบริษัทที่ผู้ใช้เป็นสมาชิกจะถูกใช้ในการแสดง |
โปรดทราบว่าไคลเอ็นต์
企业微信
ไม่สามารถรับ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
คุณสมบัติ | พิมพ์ | ที่จำเป็น | คำอธิบาย |
---|---|---|---|
งาน | งาน[] | ที่จำเป็น | อาร์เรย์ของวัตถุงาน |
└รหัส | สตริง | ไม่จำเป็น | รหัสงาน เมื่อว่างเปล่า เซิร์ฟเวอร์จะสร้าง ID โดยอัตโนมัติ |
└ รหัสผู้ใช้ | สตริง | ที่จำเป็น | ID ผู้ใช้ที่เกี่ยวข้อง |
└ประเภท | สตริง | ที่จำเป็น | ประเภทงาน โปรดดูตารางพจนานุกรมประเภทงาน |
└ ลำดับความสำคัญ | จำนวนเต็ม | ไม่จำเป็น | ลำดับความสำคัญของงาน ค่ายิ่งน้อย ลำดับความสำคัญก็จะยิ่งสูงขึ้น เมื่อว่างเปล่า ระบบจะใช้ลำดับความสำคัญที่กำหนดค่าเริ่มต้นไว้ |
└ข้อมูล | สตริง | ไม่จำเป็น | ข้อมูลงานในรูปแบบสตริง 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
ของโครงสร้างระบุตัวบอกเกี่ยวกับความปลอดภัยสำหรับ mutex ใหม่ หาก lpMutexAttributes
เป็น NULL
mutex จะได้รับตัวบอกเกี่ยวกับความปลอดภัยดีฟอลต์ ACL
ในตัวบอกความปลอดภัยเริ่มต้นของ mutex มาจากโทเค็นหลักหรือโทเค็นการเลียนแบบของผู้สร้าง
[in] bInitialOwner
ถ้าค่านี้เป็น TRUE
และผู้เรียกสร้าง mutex เธรดที่เรียกจะรับสิทธิ์ความเป็นเจ้าของเบื้องต้นของอ็อบเจ็กต์ mutex มิฉะนั้น เธรดที่เรียกจะไม่เป็นเจ้าของการล็อก mutex หากต้องการตรวจสอบว่าผู้เรียกสร้าง mutex หรือไม่ โปรดดูส่วนค่าที่ส่งคืน
[in, optional] lpName
ชื่อของอ็อบเจ็กต์ mutex ชื่อถูกจำกัดไว้ที่ MAX_PATH
อักขระ การเปรียบเทียบชื่อจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
ถ้า lpName
ตรงกับชื่อของ mutex ที่มีชื่อที่มีอยู่ ฟังก์ชันนี้จะร้องขอการเข้าถึง MUTEX_ALL_ACCESS
ในกรณีนี้ พารามิเตอร์ bInitialOwner
จะถูกละเว้น เนื่องจากมีการตั้งค่าไว้แล้วโดยกระบวนการสร้าง ถ้าพารามิเตอร์ lpMutexAttributes
ไม่เป็น NULL จะกำหนดว่าหมายเลขอ้างอิงสามารถสืบทอดมาได้หรือไม่ แต่สมาชิกตัวบอกเกี่ยวกับความปลอดภัยจะถูกละเว้น
หาก lpName
เป็น NULL
mutex จะถูกสร้างขึ้นโดยไม่มีชื่อ
ถ้า lpName
ตรงกับชื่อของเหตุการณ์ที่มีอยู่ เซมาฟอร์ ตัวจับเวลาที่รอได้ งาน หรือวัตถุการแมปไฟล์ ฟังก์ชันจะล้มเหลวและฟังก์ชัน GetLastError จะส่งกลับ ERROR_INVALID_HANDLE
เนื่องจากวัตถุเหล่านี้ใช้เนมสเปซเดียวกัน
ชื่อสามารถมีคำนำหน้า "สากล" หรือ "ท้องถิ่น" เพื่อสร้างออบเจ็กต์อย่างชัดเจนในเนมสเปซส่วนกลางหรือเซสชัน ส่วนที่เหลือของชื่อสามารถมีอักขระใดๆ ก็ได้ ยกเว้นอักขระแบ็กสแลช () สำหรับข้อมูลเพิ่มเติม โปรดดูที่ เนมสเปซวัตถุเคอร์เนล ใช้เซสชันบริการเทอร์มินัลเพื่อการสลับผู้ใช้อย่างรวดเร็ว ชื่อวัตถุเคอร์เนลต้องเป็นไปตามแนวทางที่ระบุไว้สำหรับบริการเทอร์มินัลเพื่อให้แอปพลิเคชันสามารถรองรับผู้ใช้หลายคนได้
วัตถุสามารถสร้างขึ้นได้ในเนมสเปซส่วนตัว สำหรับข้อมูลเพิ่มเติม โปรดดูเนมสเปซของวัตถุ
หากฟังก์ชันสำเร็จ ค่าที่ส่งคืนคือหมายเลขอ้างอิง (หมายเลขอ้างอิง) ของวัตถุ mutex ที่สร้างขึ้นใหม่
หากฟังก์ชันล้มเหลว ค่าที่ส่งคืนจะเป็น NULL
เมื่อต้องการรับข้อมูลข้อผิดพลาดเพิ่มเติม เรียกใช้ฟังก์ชันGetLastError
หาก mutex เป็น mutex ที่มีชื่อและมีอ็อบเจ็กต์อยู่ก่อนที่จะเรียกใช้ฟังก์ชันนี้ ค่าที่ส่งคืนจะเป็นตัวจัดการอ็อบเจ็กต์ที่มีอยู่ และฟังก์ชัน GetLastError จะส่งคืน ERROR_ALREADY_EXISTS
Process Explorer เป็นเครื่องมือที่ Microsoft จัดทำอย่างเป็นทางการเพื่อค้นหาข้อมูล Handle
และ DLL
ที่กระบวนการเปิดหรือโหลด
หน้าอย่างเป็นทางการของ Process Explorer: 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 ที่สามารถใช้เพื่อเชื่อมต่อกับเซสชันอื่นบนเซิร์ฟเวอร์โฮสต์เซสชันเดสก์ท็อประยะไกล
tscon
? tscon { < sessionID > | < sessionname > } [/dest: < sessionname > ] [/password: < pw > | /password: * ] [/v]
พารามิเตอร์ | อธิบาย |
---|---|
<sessionID> | ระบุ ID ของเซสชันที่จะเชื่อมต่อ หากใช้พารามิเตอร์ทางเลือก /dest:<sessionname> ก็สามารถระบุชื่อของเซสชันปัจจุบันได้เช่นกัน |
<sessionname> | ระบุชื่อของเซสชันที่จะเชื่อมต่อ |
/ปลายทาง: <sessionname> | ระบุชื่อของเซสชันปัจจุบัน เมื่อคุณเชื่อมต่อกับเซสชันใหม่ เซสชันนี้จะถูกตัดการเชื่อมต่อ คุณยังสามารถใช้พารามิเตอร์นี้เพื่อเชื่อมต่อเซสชันของผู้ใช้อื่นกับเซสชันอื่นได้ |
/รหัสผ่าน: <pw> | ระบุรหัสผ่านของผู้ใช้ที่เป็นเจ้าของเซสชันที่จะเชื่อมต่อ ต้องใช้รหัสผ่านนี้เมื่อผู้ใช้ที่เชื่อมต่อไม่ได้เป็นเจ้าของเซสชัน |
/รหัสผ่าน: * | พร้อมท์ให้ใส่รหัสผ่านของผู้ใช้ที่เป็นเจ้าของเซสชันที่คุณต้องการเชื่อมต่อ |
/v | แสดงข้อมูลเกี่ยวกับการดำเนินการที่กำลังดำเนินการ |
- | แสดงความช่วยเหลือที่พรอมต์คำสั่ง |
หากต้องการยกเลิกการเชื่อมต่อจากเดสก์ท็อประยะไกล ให้รันคำสั่งต่อไปนี้บนคอมพิวเตอร์ระยะไกล (ในหน้าต่างการเชื่อมต่อเดสก์ท็อประยะไกล) ในฐานะผู้ดูแลระบบ เช่น จากบรรทัดคำสั่ง:
%windir% S ystem32 t scon.exe RDP-Tcp# # # NNN /dest:console
โดยที่ RDP-Tcp### NNN
คือ ID
ของเซสชันเดสก์ท็อประยะไกลปัจจุบัน เช่น RDP-Tcp#5
คุณสามารถดูได้ในคอลัมน์ เซสชัน บนแท็บ ผู้ใช้ ของ Windows Task Manager
คุณจะเห็นข้อความ เซสชันบริการเดสก์ท็อประยะไกลของคุณสิ้นสุดลงแล้ว และไคลเอ็นต์เดสก์ท็อประยะไกลจะปิดลง อย่างไรก็ตาม โปรแกรมและการทดสอบทั้งหมดบนคอมพิวเตอร์ระยะไกลจะยังคงทำงานตามปกติ
เคล็ดลับ: คอลัมน์เซสชันจะถูกซ่อนไว้ตามค่าเริ่มต้น หากต้องการแสดง ให้คลิกขวาที่ใดก็ได้ในแถวที่แสดง CPU, หน่วยความจำ ฯลฯ และเลือกเซสชันในเมนูบริบทที่เปิดขึ้น
คุณสามารถใช้แบตช์ไฟล์เพื่อทำให้กระบวนการตัดการเชื่อมต่อเป็นแบบอัตโนมัติ บนคอมพิวเตอร์ระยะไกล ให้ทำดังต่อไปนี้:
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 ได้
สองวิธีต่อไปนี้ส่วนใหญ่จะใช้ในโครงการ:
ไพวินออโต้
เป็นโมดูลหลามสำหรับการทำงานอัตโนมัติของ Microsoft Windows GUI ในกรณีที่ง่ายที่สุด ช่วยให้คุณสามารถส่งการทำงานของเมาส์และคีย์บอร์ดไปยังกล่องโต้ตอบและส่วนควบคุมของ 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 และนักพัฒนาสามารถแก้ไขการกำหนดค่าตามสถานการณ์จริงได้
คุณสมบัติ | คำอธิบาย | ค่าเริ่มต้น |
---|---|---|
เซิร์ฟเวอร์.โฮสต์ | โฮสต์เซิร์ฟเวอร์ | โลคัลโฮสต์ |
เซิร์ฟเวอร์พอร์ต | พอร์ตเซิร์ฟเวอร์ | 18888 |
เซิร์ฟเวอร์.เส้นทาง | เส้นทางเซิร์ฟเวอร์ | /rpa |
เซิร์ฟเวอร์.ssl | ไม่ว่าจะเปิดใช้งาน SSL | เท็จ |
ขนาดแอป | จำนวนโปรแกรมสูงสุดที่สามารถรันได้ | 32 |
app.path <appid> | เส้นทางโปรแกรมที่กำหนดเอง | รับจากรีจิสทรี |
airtest.cvstrategy | อัลกอริธึมการจดจำรูปภาพ | [tpl ร่อน เร็ว] |
airtest.หมดเวลา | อัลกอริธึมการจดจำรูปภาพ | 20 วินาที |
airtest.timeout-tmp | อัลกอริธึมการจดจำรูปภาพ | 3 วินาที |
การบันทึกระดับ | ระดับบันทึก | ดีบัก |
การบันทึกรูปแบบ | รูปแบบบันทึก | รูปแบบเริ่มต้น |
logging.ชื่อไฟล์ | ชื่อไฟล์บันทึก | ./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-คลาสชื่อ | ขับเคลื่อนแหล่งข้อมูล | com.mysql.cj.jdbc.ไดร์เวอร์ |
spring.datasource.url | URL แหล่งข้อมูล | jdbc:mysql://localhost:3306/rpa |
spring.datasource.ชื่อผู้ใช้ | ชื่อผู้ใช้แหล่งข้อมูล | |
spring.datasource.password | รหัสผ่านแหล่งข้อมูล | |
spring.data.redis.host | โฮสต์เรดิส | โลคัลโฮสต์ |
spring.data.redis.port | พอร์ตเรดิส | 6379 |
spring.data.redis.password | รหัสผ่าน Redis | |
spring.data.redis.database | ฐานข้อมูล Redis | 0 |
การกำหนดค่าข้างต้นสามารถแก้ไขได้ในไฟล์ application.properties
คุณสมบัติ | คำอธิบาย | ค่าเริ่มต้น |
---|---|---|
rpa.websocket.port | พอร์ตบริการ WebSocket | 18888 |
rpa.websocket.path | เส้นทางบริการ WebSocket | /rpa |
rpa.websocket.idle-หมดเวลา | หมดเวลาใช้งานบริการ WebSocket | 5ม |
rpa.converter.วันที่-เวลา-รูปแบบ | รูปแบบวันที่เวลาสากล | ปปปป-ดด-วว HH:mm:ss |
rpa.converter.date-รูปแบบ | รูปแบบวันที่สากล | ปปปป-MM-dd |
rpa.converter.รูปแบบเวลา | รูปแบบเวลาทั่วโลก | ฮช:นน:สส |
rpa.client.cache-key | รูปแบบคีย์แคชไคลเอ็นต์ | rpa:client: <appid> : <account> |
rpa.client.cache-หมดเวลา | หมดเวลาแคชไคลเอ็นต์ | 5ม |
ดู RpaProperties สำหรับรายละเอียด
ก่อนที่จะเริ่มบริการ โปรดรันสคริปต์ต่อไปนี้ในอินสแตนซ์ 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#issue
โปรเจ็กต์นี้มีไว้เพื่อการเรียนรู้เท่านั้น โปรดอย่าใช้ในสภาพแวดล้อมการใช้งานจริง
โครงการนี้อยู่ภายใต้ใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับรายละเอียด