Phân tích công nghệ & Tình huống thực tế
Bài học này phân tích chi tiết ưu nhược điểm của từng công nghệ được sử dụng trong Auto Docs Generator, kèm theo các tình huống thực tế.
1. Phân tích công nghệ
1.1. Playwright vs Selenium vs Puppeteer
| Tiêu chí | Playwright | Selenium | Puppeteer |
|---|---|---|---|
| Tốc độ | ⭐⭐⭐⭐⭐ WebSocket | ⭐⭐⭐ HTTP JSON Wire | ⭐⭐⭐⭐ DevTools |
| Auto-wait | ✅ Tích hợp sẵn | ❌ Cần explicit wait | ⚠️ Một phần |
| Codegen | ✅ Mạnh mẽ | ❌ Cần plugin | ❌ Không có |
| Multi-browser | ✅ Chromium, Firefox, WebKit | ✅ Tất cả | ❌ Chỉ Chromium |
| Ngôn ngữ | Python, JS, Java, C# | Tất cả | JS/TS only |
Ưu điểm Playwright:
- Tích hợp Codegen: Tự động sinh mã từ thao tác người dùng
- Tự động đợi: Tự động đợi phần tử xuất hiện, giảm test không ổn định
- Bộ chọn mạnh mẽ:
get_by_role,get_by_text,get_by_label - Chặn mạng: Dễ dàng giả lập phản hồi API
- Theo dõi & Chụp màn hình: Gỡ lỗi dễ dàng
Nhược điểm Playwright:
- Kích thước lớn: ~300MB cho file trình duyệt
- Đường cong học tập: API khác biệt với Selenium
- Ít tài liệu tiếng Việt: Cộng đồng nhỏ hơn Selenium
Kết luận: Playwright là lựa chọn tối ưu cho Auto Docs vì tính năng Codegen và Tự động đợi.
1.2. Google Gemini vs OpenAI GPT-4 Vision
| Tiêu chí | Google Gemini | OpenAI GPT-4 Vision |
|---|---|---|
| Chi phí | ⭐⭐⭐⭐⭐ Free tier 1500 req/ngày | ⭐⭐ ~$0.01/image |
| Chất lượng | ⭐⭐⭐⭐ Tốt | ⭐⭐⭐⭐⭐ Xuất sắc |
| Tốc độ | ⭐⭐⭐⭐ 1-2s | ⭐⭐⭐ 2-4s |
| Tiếng Việt | ⭐⭐⭐⭐ Tốt | ⭐⭐⭐⭐⭐ Rất tốt |
| Rate limit | ⭐⭐⭐ 15 RPM (free) | ⭐⭐⭐⭐ 500 RPM |
| Độ ổn định | ⭐⭐⭐ Hay thay đổi model | ⭐⭐⭐⭐⭐ Ổn định |
Ưu điểm Gemini:
- Miễn phí: Gói miễn phí đủ cho công cụ nội bộ
- Hạn mức cao: Một số model có 14,400 yêu cầu/ngày
- Đa dạng model: gemma-3, gemini-2.5-flash, gemini-1.5-flash
- Tích hợp dễ: SDK đơn giản
Nhược điểm Gemini:
- Hạn mức hết nhanh: Model tốt nhất có hạn mức thấp
- Model hay thay đổi: Google thường xuyên ngừng hỗ trợ model
- Kết quả không ổn định: Cùng prompt, kết quả có thể khác nhau
Ưu điểm OpenAI:
- Chất lượng cao: Kết quả tự nhiên, chính xác
- Ổn định: API ít thay đổi
- Tiếng Việt tốt: Hiểu ngữ cảnh tiếng Việt rất tốt
Nhược điểm OpenAI:
- Chi phí: ~$0.01/ảnh, tích lũy nhanh
- Giới hạn tốc độ: Cần quản lý hạn mức
Kết luận: Gemini cho công cụ nội bộ (miễn phí), OpenAI cho sản phẩm (chất lượng).
1.3. Trạng thái lưu trữ vs Tự điền đăng nhập
| Tiêu chí | Trạng thái lưu trữ | Tự điền form |
|---|---|---|
| Bảo mật | ⭐⭐⭐⭐⭐ Chỉ lưu phiên | ⭐⭐ Lưu thông tin đăng nhập |
| Độ tin cậy | ⭐⭐⭐⭐⭐ Tính năng gốc Playwright | ⭐⭐ Phụ thuộc giao diện |
| Bảo trì | ⭐⭐⭐⭐⭐ Không cần cập nhật | ⭐⭐ Cập nhật khi giao diện đổi |
| Thiết lập | ⭐⭐⭐⭐ Một lần | ⭐⭐⭐ Cấu hình phức tạp |
| Nhiều trang | ⭐⭐⭐ Một file/trang | ⭐⭐⭐⭐ Cấu hình nhiều trang |
Ưu điểm Trạng thái lưu trữ:
- An toàn: Không lưu tên đăng nhập/mật khẩu
- Đơn giản: Playwright xử lý hết
- Di động: Sao chép file giữa các máy
- Đáng tin cậy: Không phụ thuộc vào cấu trúc form
Nhược điểm Trạng thái lưu trữ:
- Token hết hạn: Cần làm mới khi hết hạn
- Một file: Khó quản lý nhiều tài khoản
Kết luận: Trạng thái lưu trữ là thực hành tốt nhất cho xác thực.
1.4. PyInstaller vs cx_Freeze vs Nuitka
| Tiêu chí | PyInstaller | cx_Freeze | Nuitka |
|---|---|---|---|
| Dễ sử dụng | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| Kích thước | ⭐⭐⭐ ~50MB | ⭐⭐⭐ ~50MB | ⭐⭐⭐⭐ ~30MB |
| Tốc độ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ Gốc |
| Tương thích | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| Import ẩn | ⭐⭐⭐⭐ Tốt | ⭐⭐⭐ | ⭐⭐ |
Ưu điểm PyInstaller:
- Dễ sử dụng: File spec đơn giản
- Tài liệu tốt: Cộng đồng lớn
- Hệ thống hook: Xử lý phụ thuộc tự động
- Chế độ một file: Có thể đóng gói thành 1 file
Nhược điểm PyInstaller:
- Cảnh báo nhầm từ antivirus: Thường bị cảnh báo
- Khởi động chậm: Giải nén file tạm
- Kích thước lớn: Đóng gói cả Python runtime
Kết luận: PyInstaller là lựa chọn cân bằng giữa dễ sử dụng và tương thích.
1.5. Đầu ra Markdown vs HTML
| Tiêu chí | Markdown | HTML |
|---|---|---|
| Tính di động | ⭐⭐⭐⭐⭐ Văn bản thuần | ⭐⭐⭐ Cần trình duyệt |
| Định dạng | ⭐⭐ Hạn chế | ⭐⭐⭐⭐⭐ Đầy đủ CSS |
| Tương tác | ⭐ Không có | ⭐⭐⭐⭐ Lightbox, Mục lục |
| Quản lý phiên bản | ⭐⭐⭐⭐⭐ Dễ so sánh | ⭐⭐ Khó so sánh |
| Chuyển đổi | ⭐⭐⭐⭐ Dễ chuyển đổi | ⭐⭐⭐ Cần công cụ |
Kết luận: Cả hai đều cần thiết - Markdown cho lập trình viên, HTML cho người dùng cuối.
2. Tình huống thực tế
Tình huống 1: Portal iNET - Quản lý Cloud Server
Bối cảnh:
- Tạo hướng dẫn sao lưu Cloud Server
- Yêu cầu đăng nhập SSO
- Nhiều bước với trạng thái đang tải
Thách thức:
| Vấn đề | Giải pháp |
|---|---|
| Chuyển hướng SSO phức tạp | Trạng thái lưu trữ - đăng nhập 1 lần |
| Biểu tượng đang tải | wait_for_load_state('networkidle') |
| Nội dung động | Chiến lược bộ chọn dự phòng |
| Hạn mức AI hết | Cơ chế tự động chuyển model |
Kết quả:
- 9 bước được ghi lại tự động
- AI mô tả chính xác 8/9 bước (89%)
- Thời gian: 3 phút (so với 30 phút thủ công)
Bài học rút ra:
- Trạng thái lưu trữ giải quyết 100% vấn đề xác thực
- Cần thời gian đệm sau mỗi thao tác (800ms)
- AI cần gợi ý thao tác để mô tả chính xác
Tình huống 2: eKYC - Quy trình Camera
Bối cảnh:
- Chụp CCCD + Xác thực khuôn mặt
- Cần quyền truy cập Camera
- Nhiều bước xác thực
Thách thức:
| Vấn đề | Giải pháp |
|---|---|
| Không có Camera thật | Luồng media giả |
| Phát hiện khuôn mặt | Video ghi sẵn |
| Hết thời gian OCR | Tùy chọn tạm dừng thủ công |
Mã giải pháp:
context = browser.new_context(
permissions=["camera"],
args=[
"--use-fake-ui-for-media-stream",
"--use-fake-device-for-media-stream",
"--use-file-for-fake-video-capture=./sample.y4m"
]
)Kết quả:
- Có thể ghi quy trình eKYC trên máy chủ không giao diện
- AI mô tả được các bước camera
Tình huống 3: Phát lại với giao diện thay đổi
Bối cảnh:
- Script đã ghi 1 tuần trước
- Giao diện đã được cập nhật (văn bản nút đổi)
- Cần tạo lại hướng dẫn
Thách thức:
| Vấn đề | Giải pháp |
|---|---|
| Bộ chọn không còn hợp lệ | Chiến lược bộ chọn dự phòng |
| Văn bản nút đổi | get_by_role thay vì get_by_text |
| Phần tử mới | Bỏ qua với try-catch |
Chiến lược dự phòng trong mã:
def _find_element_with_fallback(page, code):
# 1. Thử selector gốc
# 2. Thử CSS selector
# 3. Fallback: tìm theo tag + text
for tag in ['button', 'a', 'span', 'div']:
fallback = page.locator(f'{tag}:has-text("{text}")').first
if fallback.is_visible(timeout=1000):
return fallbackKết quả:
- 7/10 thao tác phát lại thành công
- 3 thao tác cần sửa thủ công
3. Trường hợp đặc biệt & Giải pháp
3.1. AI ảo giác
Vấn đề: AI bịa ra phần tử không tồn tại
Giải pháp:
# Giảm temperature
generation_config = {
"temperature": 0.2, # Thấp = ít creative
"max_output_tokens": 256,
}
# Cung cấp action_hint
prompt = f"""
GỢI Ý HÀNH ĐỘNG: {action_hint}
CHỈ MÔ TẢ NHỮNG GÌ THẤY TRONG ẢNH.
"""3.2. Cạn kiệt hạn mức
Vấn đề: Hạn mức Gemini hết giữa chừng
Giải pháp:
# Tự động chuyển model
if "429" in error or "quota" in error:
_failed_models.append(current_model)
new_model = select_best_model(remaining_models)
_switch_model(new_model)
return retry()3.3. Tải ảnh lười
Vấn đề: Chụp màn hình trước khi ảnh tải xong
Giải pháp:
# Cuộn để kích hoạt tải lười
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
page.wait_for_timeout(500)
page.evaluate("window.scrollTo(0, 0)")
page.wait_for_load_state("networkidle")3.4. Pop-up che nội dung
Vấn đề: Pop-up che mất nội dung
Giải pháp:
# Chèn CSS để ẩn pop-up
page.add_style_tag(content="""
.popup, .modal-backdrop, .cookie-banner {
display: none !important;
}
""")4. Số liệu & Đánh giá
4.1. Số liệu hiệu năng
| Chỉ số | Giá trị | Ghi chú |
|---|---|---|
| Thời gian ghi | ~1x thời gian thực | Phụ thuộc người dùng |
| Thời gian phát lại | ~0.8s/bước | Chế độ không giao diện |
| Phân tích AI | ~1.5s/ảnh | Gemini |
| Tổng (10 bước) | ~3 phút | Từ đầu đến cuối |
4.2. Số liệu chất lượng
| Chỉ số | Giá trị | Ghi chú |
|---|---|---|
| Độ chính xác AI | 85-90% | Với gợi ý thao tác |
| Tỷ lệ phát lại thành công | 70-80% | Sau 1 tuần |
| Mức độ hài lòng | 4.2/5 | Khảo sát nội bộ |
4.3. Phân tích chi phí
| Nhà cung cấp | Chi phí/Hướng dẫn (10 bước) | Hàng tháng (100 hướng dẫn) |
|---|---|---|
| Gemini miễn phí | $0 | $0 |
| Gemini trả phí | ~$0.05 | ~$5 |
| OpenAI | ~$0.10 | ~$10 |
5. Khuyến nghị
Khi nào dùng công nghệ nào?
| Tình huống | Khuyến nghị |
|---|---|
| Công cụ nội bộ, ngân sách thấp | Gemini miễn phí + Playwright |
| Sản phẩm, chất lượng cao | OpenAI + Playwright |
| Hướng dẫn đơn giản, không AI | Playwright + Mô tả dựa trên mã |
| Luồng xác thực phức tạp | Trạng thái lưu trữ |
| Phân phối cho người dùng cuối | PyInstaller + Đầu ra HTML |
Thực hành tốt
- Luôn dùng Trạng thái lưu trữ cho xác thực
- Triển khai dự phòng cho AI và bộ chọn
- Thời gian đệm 800ms sau mỗi thao tác
- Xác thực kết quả AI trước khi lưu
- Quản lý phiên bản các script đã ghi
Tổng kết
Auto Docs Generator kết hợp nhiều công nghệ, mỗi công nghệ có đánh đổi riêng:
- Playwright: Tốt nhất cho tự động hóa trình duyệt
- Gemini/OpenAI: Phân tích AI với cơ chế dự phòng
- Trạng thái lưu trữ: Xác thực an toàn
- PyInstaller: Phân phối đa nền tảng
Thành công của công cụ phụ thuộc vào việc hiểu rõ ưu nhược điểm và áp dụng đúng ngữ cảnh.