Có những phần mềm chỉ tồn tại dưới dạng màn hình: một app desktop Windows đời cũ, một web nội bộ đăng nhập bằng captcha, không API, không DB truy cập được. Lúc này RPA (Robotic Process Automation) là cây cầu cuối cùng: bot giả lập thao tác con người — gõ phím, click chuột, đọc màn hình — để agent gián tiếp điều khiển.
RPA là bridge, không phải bộ não
Đừng để agent "tự bấm màn hình". Kiến trúc đúng:
[Agent] --(goi tool: tao_phieu_xuat(ma_don))--> [RPA script co dinh]
<--(ket qua: OK / loi)-----------------
Agent ra quyết định (tạo phiếu nào), còn kịch bản RPA là cố định, do bạn viết và test kỹ. Agent không được tùy hứng điều khiển từng click, vì UI automation cực kỳ mong manh.
Hai loại RPA
- Web RPA: dùng Playwright/Selenium cho ứng dụng web nội bộ.
- Desktop RPA: dùng công cụ như UiPath, Power Automate Desktop, hoặc pywinauto cho app Windows.
Ví dụ: web RPA nhập đơn vào CRM nội bộ (Playwright)
from playwright.sync_api import sync_playwright
def tao_don_crm(ma_kh: str, san_pham: str, so_luong: int) -> dict:
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto(CRM_URL, timeout=15000)
page.fill("#username", USER); page.fill("#password", PWD)
page.click("#btnLogin")
page.wait_for_selector("#dashboard") # cho tai xong
page.click("text=Tao don moi")
page.fill("#customer", ma_kh)
page.fill("#product", san_pham)
page.fill("#qty", str(so_luong))
page.click("#btnSave")
# doc lai ket qua de xac nhan, khong tin "click xong la xong"
page.wait_for_selector(".order-id")
oid = page.inner_text(".order-id")
browser.close()
return {"ok": True, "order_id": oid}
Điểm mấu chốt: sau khi bấm Save, ta đọc lại order-id để xác nhận thật sự thành công, thay vì tin rằng click là xong.
Ba nguyên tắc sống còn của RPA bền vững
- Selector ổn định: ưu tiên
id,name,data-*thay vì XPath dài hay vị trí tọa độ. Tọa độ chuột là thứ vỡ đầu tiên khi đổi độ phân giải. - Chờ tường minh (explicit wait): dùng
wait_for_selector, không dùngsleep(3)cố định — mạng chậm là sai ngay. - Xác minh kết quả: luôn đọc lại trạng thái sau hành động để biết chắc đã thành công.
Checklist trước khi đưa RPA vào production
- [ ] Đã thử hết API/DB/file chưa? RPA thật sự là lựa chọn cuối?
- [ ] Selector dựa trên id/data-* ổn định?
- [ ] Có explicit wait, không có sleep cứng?
- [ ] Có bước xác minh kết quả sau hành động?
- [ ] Chạy trên user/máy riêng, không đè lên máy nhân viên?
- [ ] Có screenshot/log khi lỗi để điều tra?
- [ ] Có xử lý idempotency (chạy 2 lần không tạo 2 đơn)?
Sai lầm thường gặp
- Điều khiển bằng tọa độ chuột → vỡ ngay khi đổi màn hình/độ phân giải.
- Dùng
sleepcố định thay vì chờ theo sự kiện → lỗi ngẫu nhiên khó tái hiện. - Cho agent tự sinh từng bước RPA → không kiểm soát, dễ thao tác nhầm dữ liệu thật.
- Không xác minh kết quả → báo thành công trong khi thực tế lưu thất bại.
- Chạy RPA trên máy đang có người dùng → bot và người tranh chuột, hỗn loạn.
- Bỏ qua idempotency → chạy lại tạo trùng đơn.
Tổng kết
RPA cho agent chạm vào cả những hệ thống chỉ có màn hình, nhưng nó mong manh nhất trong bốn tầng. Hãy dùng nó như bridge cố định, chọn selector ổn định, chờ tường minh, và luôn xác minh kết quả. Làm đúng, RPA là cứu cánh; làm ẩu, nó là nguồn sự cố bất tận.