Skip to content

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íPlaywrightSeleniumPuppeteer
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 GeminiOpenAI 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íPyInstallercx_FreezeNuitka
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íMarkdownHTML
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ạpTrạng thái lưu trữ - đăng nhập 1 lần
Biểu tượng đang tảiwait_for_load_state('networkidle')
Nội dung độngChiến lược bộ chọn dự phòng
Hạn mức AI hếtCơ 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ậtLuồng media giả
Phát hiện khuôn mặtVideo ghi sẵn
Hết thời gian OCRTùy chọn tạm dừng thủ công

Mã giải pháp:

python
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 đổiget_by_role thay vì get_by_text
Phần tử mớiBỏ qua với try-catch

Chiến lược dự phòng trong mã:

python
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 fallback

Kế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:

python
# 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:

python
# 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:

python
# 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:

python
# 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ựcPhụ thuộc người dùng
Thời gian phát lại~0.8s/bướcChế độ không giao diện
Phân tích AI~1.5s/ảnhGemini
Tổng (10 bước)~3 phútTừ đầu đến cuối

4.2. Số liệu chất lượng

Chỉ sốGiá trịGhi chú
Độ chính xác AI85-90%Với gợi ý thao tác
Tỷ lệ phát lại thành công70-80%Sau 1 tuần
Mức độ hài lòng4.2/5Khảo sát nội bộ

4.3. Phân tích chi phí

Nhà cung cấpChi 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ốngKhuyến nghị
Công cụ nội bộ, ngân sách thấpGemini miễn phí + Playwright
Sản phẩm, chất lượng caoOpenAI + Playwright
Hướng dẫn đơn giản, không AIPlaywright + Mô tả dựa trên mã
Luồng xác thực phức tạpTrạng thái lưu trữ
Phân phối cho người dùng cuốiPyInstaller + Đầu ra HTML

Thực hành tốt

  1. Luôn dùng Trạng thái lưu trữ cho xác thực
  2. Triển khai dự phòng cho AI và bộ chọn
  3. Thời gian đệm 800ms sau mỗi thao tác
  4. Xác thực kết quả AI trước khi lưu
  5. 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.

Bài học tiếp theo

Xử lý sự cố & Tối ưu hóa

Internal documentation for iNET Portal