Demo Trực Tiếp: Trò Chuyện Với AI, Tạo Script Hoàn Chỉnh Trong Một Bước
Chương này cung cấp một bản demo thực tế, hoàn chỉnh về quy trình từ "nêu yêu cầu bằng ngôn ngữ tự nhiên" đến "nhận được script sẵn sàng để chạy", với mô tả chi tiết cho từng bước.
Kịch Bản Demo
Bối Cảnh Doanh Nghiệp: Bạn có 20 tài khoản người bán Amazon và cần kiểm tra số lượng đơn hàng "Pending" (Đang chờ xử lý) dưới mỗi tài khoản hàng ngày, sau đó tổng hợp chúng thành một báo cáo Excel cho nhóm của bạn.
Phương Pháp Truyền Thống: Đăng nhập thủ công vào từng tài khoản một, ghi lại số lượng đơn hàng và điền vào Excel. Việc này mất khoảng 2 giờ.
Sử Dụng AI + Mbbrowser: Mô tả yêu cầu, AI tạo script và script sẽ xử lý phần còn lại. Tổng thời gian tiêu tốn là 15 phút (bao gồm cả cấu hình).
Bước 1: Chuẩn Bị (5 Phút)
NOTE
Giả định rằng bạn đã hoàn thành các cấu hình sau từ các chương trước:
- ✅ Cursor hoặc Antigravity đã được cài đặt.
- ✅ Mbbrowser Rules Package đã được nạp vào Cursor.
- ✅ Mbbrowser ApiServer đã được khởi động (
http://127.0.0.1:8186). - ✅ Các tài khoản Amazon của bạn đã được đăng nhập trong các môi trường Mbbrowser (Cookies đã được lưu).
Chuẩn bị File sessions.txt
Trong thư mục dự án của bạn, hãy tạo file sessions.txt và điền vào tất cả các ID môi trường mà bạn muốn vận hành:
a1b2c3d4e5f6789012345678901234ab
b2c3d4e5f67890123456789012345bcd
c3d4e5f678901234567890123456cde
... (mỗi Session_ID một dòng, tổng cộng 20 dòng)Bước 2: Nhập Yêu Cầu Trong Cursor (30 Giây)
Nhấn Ctrl + L để mở Cursor Chat và nhập nội dung sau:
Tôi có một file sessions.txt của Mbbrowser chứa 20 Session_ID tài khoản, mỗi dòng một ID.
Các tài khoản này đã được đăng nhập vào Amazon trong các môi trường Mbbrowser.
Vui lòng giúp tôi tạo một script Python với các tính năng sau:
1. Đọc tất cả Session_ID từ file sessions.txt.
2. Mở hàng loạt tất cả các môi trường (tối đa 10 môi trường cùng lúc).
3. Sau khi mỗi môi trường được Playwright tiếp quản:
a. Chờ trang tải xong (các môi trường thường dừng ở trang cuối cùng khi đóng).
b. Điều hướng đến https://www.amazon.com/gp/orders-v2/list (trang đơn hàng của người bán Amazon).
c. Chờ phần tử .a-row.shipment xuất hiện (tín hiệu danh sách đơn hàng đã tải).
d. Đếm số lượng phần tử .shipment-status-buyerPending trên trang (đây là các đơn hàng "Pending").
e. Ghi 8 ký tự đầu tiên của Session_ID + số lượng đơn hàng pending vào kết quả.
4. Đóng tất cả các môi trường sau khi hoàn thành tất cả thao tác.
5. Lưu kết quả vào file amazon_orders_[ngày hôm nay].xlsx,
Các cột: Env ID (8 ký tự đầu), Pending Order Count, Check Time, Status.
Lưu ảnh chụp màn hình vào thư mục errors/ nếu có ngoại lệ xảy ra và ghi "Check Failed" vào bảng kết quả.Bước 3: AI Tạo Code (Khoảng 30 Giây)
Sau khi nhận được yêu cầu, AI của Cursor sẽ tạo toàn bộ mã nguồn. Kết quả được tạo ra sẽ trông như thế này:
"""
Mbbrowser + Amazon Order Check Script
Tự động kiểm tra số lượng đơn hàng đang chờ xử lý trên tất cả các môi trường.
"""
import threading
import datetime
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor, as_completed
import requests
import openpyxl
from playwright.sync_api import sync_playwright, TimeoutError as PWTimeout
# ==============================
# Cấu hình (Sửa đổi nếu cần)
# ==============================
APISERVER = "http://127.0.0.1:8186"
SESSIONS_FILE = "sessions.txt"
MAX_WORKERS = 10 # Số lượng luồng tối đa
ERRORS_DIR = Path("errors")
ERRORS_DIR.mkdir(exist_ok=True)
results_lock = threading.Lock()
results = []
# ==============================
# APIServer Wrapper
# ==============================
def start_env(session_id: str) -> dict | None:
try:
resp = requests.post(
f"{APISERVER}/api/v1/browser/start",
json={"Session_ID": [session_id], "isHeadless": False},
timeout=30
)
data = resp.json()
if data["code"] == 0:
return data["data"]["listid"][0]
except Exception as e:
print(f"[{session_id[:8]}] Lỗi APIServer: {e}")
return None
def stop_env(session_id: str):
try:
requests.post(
f"{APISERVER}/api/v1/browser/stop",
json={"Session_ID": session_id}, # Lệnh dừng thường yêu cầu một chuỗi
timeout=10
)
except Exception:
pass
# ==============================
# Nhiệm vụ cho một tài khoản
# ==============================
def check_orders(session_id: str):
now = datetime.datetime.now().strftime("%H:%M:%S")
env_short = session_id[:8]
env_data = start_env(session_id)
if not env_data:
with results_lock:
results.append({
"env_id": env_short,
"pending_orders": "N/A",
"check_time": now,
"status": "Không thể mở môi trường"
})
return
port = env_data.get("browser_CDP_Port")
ws = f"ws://127.0.0.1:{port}/json/version"
pw = sync_playwright().start()
try:
browser = pw.chromium.connect_over_cdp(ws)
context = browser.contexts[0]
page = context.pages[0] if context.pages else context.new_page()
# Truy cập trang đơn hàng Amazon
page.goto(
"https://www.amazon.com/gp/orders-v2/list",
wait_until="domcontentloaded",
timeout=20000
)
# Đợi danh sách đơn hàng tải xong
page.wait_for_selector(".a-row.shipment", timeout=15000)
# Đếm các đơn hàng đang chờ xử lý (pending)
pending = page.locator(".shipment-status-buyerPending").count()
print(f"[{env_short}] ✅ Đơn hàng Pending: {pending}")
with results_lock:
results.append({
"env_id": env_short,
"pending_orders": pending,
"check_time": now,
"status": "Thành công"
})
browser.close()
except PWTimeout:
page.screenshot(path=str(ERRORS_DIR / f"{env_short}_timeout.png"))
with results_lock:
results.append({
"env_id": env_short,
"pending_orders": "N/A",
"check_time": now,
"status": "Trang bị hết thời gian chờ (Timeout)"
})
except Exception as e:
try:
page.screenshot(path=str(ERRORS_DIR / f"{env_short}_error.png"))
except Exception:
pass
with results_lock:
results.append({
"env_id": env_short,
"pending_orders": "N/A",
"check_time": now,
"status": f"Ngoại lệ: {str(e)[:50]}"
})
finally:
try:
pw.stop()
except Exception:
pass
stop_env(session_id)
# ==============================
# Chương trình chính
# ==============================
def main():
# Đọc danh sách Session_ID
session_ids = [
line.strip()
for line in Path(SESSIONS_FILE).read_text().splitlines()
if line.strip()
]
print(f"📋 Tổng cộng {len(session_ids)} tài khoản, Số luồng tối đa {MAX_WORKERS}")
# Thực thi đồng thời
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as pool:
futures = {pool.submit(check_orders, sid): sid for sid in session_ids}
for future in as_completed(futures):
sid = futures[future]
try:
future.result()
except Exception as e:
print(f"[{sid[:8]}] Ngoại lệ chưa được xử lý: {e}")
# Lưu báo cáo Excel
today = datetime.date.today().strftime("%Y%m%d")
filename = f"amazon_orders_{today}.xlsx"
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "Kết quả kiểm tra đơn hàng"
ws.append(["Env ID (8 ký tự đầu)", "Đơn hàng Pending", "Thời gian kiểm tra", "Trạng thái"])
for r in results:
ws.append([r["env_id"], r["pending_orders"], r["check_time"], r["status"]])
wb.save(filename)
# Báo cáo tổng kết
success = sum(1 for r in results if r["status"] == "Thành công")
print(f"\n{'='*40}")
print(f"✅ Thành công: {success} / {len(results)}")
print(f"📄 Báo cáo được lưu vào: {filename}")
print(f"❌ Ảnh chụp lỗi tại thư mục: errors/")
if __name__ == "__main__":
main()Bước 4: Cài Đặt Phụ Thuộc & Chạy (2 Phút)
Sau khi tạo code, AI thường sẽ đưa ra lời khuyên về các thư viện phụ thuộc cần cài đặt:
pip install playwright requests openpyxlSau đó chạy trực tiếp:
python check_amazon_orders.pyKết Quả Dự Kiến
📋 Tổng cộng 20 tài khoản, Số luồng tối đa 10
[a1b2c3d4] ✅ Đơn hàng Pending: 3
[b2c3d4e5] ✅ Đơn hàng Pending: 0
[c3d4e5f6] ✅ Đơn hàng Pending: 7
...
========================================
✅ Thành công: 18 / 20
📄 Báo cáo được lưu vào: amazon_orders_20260226.xlsx
❌ Ảnh chụp lỗi tại thư mục: errors/Các Vấn Đề Thường Gặp & Mẹo Hiệu Chỉnh Của AI
"Script đang chạy nhưng không thể tìm thấy các phần tử đơn hàng"
Chọn đoạn mã liên quan và nhấn Ctrl + K. Nhập nội dung:
Bộ chọn (selector) cho trang Amazon đã thay đổi. Bộ chọn hàng đơn hàng thực tế là .order-info, và bộ chọn trạng thái pending là .order-status-pending. Vui lòng cập nhật mã nguồn."Thêm tính năng: thu thập thêm chi tiết đơn hàng"
Tiếp tục cuộc hội thoại trong Chat:
Dựa trên mã nguồn ở trên, sau khi thu thập số lượng đơn hàng, vui lòng thu thập thêm ID đơn hàng (.a-fixed-right-grid-col .a-link-normal) và ngày giao hàng dự kiến (.expected-ship-date) cho từng đơn hàng pending, và ghi lại chúng vào Excel."Đồng thời quá nhanh gây ra hiện tượng treo; cần giới hạn tốc độ"
Dựa trên ThreadPoolExecutor, hãy thêm thời gian chờ 3 giây trước khi bắt đầu mỗi tác vụ mới để tránh các vấn đề về bộ nhớ khi mở quá nhiều môi trường cùng lúc.Tổng Kết: Các Thực Hành Tốt Nhất Để Viết Script Bằng AI
[ Chuẩn Bị ]
1. Rules Package đã được nạp → AI hiểu tất cả các giao diện của Mbbrowser.
2. Xác nhận APIServer đã được khởi động.
[ Mô Tả Yêu Cầu ]
Càng cụ thể càng tốt:
✅ "Truy cập https://xxx, chờ phần tử #main-content, nhấp vào .order-btn, chờ thông báo thành công."
❌ "Giúp tôi quản lý đơn hàng."
[ Tạo Mã ]
Thường thì 80% mã nguồn có thể sử dụng ngay lập tức. Sửa các lỗi nhỏ thông qua trò chuyện tiếp theo.
[ Tối Ưu Hóa Lặp Lại ]
"Thêm tính năng xx dựa trên nội dung này" → AI sẽ bổ sung các thay đổi mà không cần viết lại toàn bộ.IMPORTANT
Nhắc nhở quan trọng: Mã do AI tạo ra đôi khi có thể có các lỗi nhỏ. Luôn chạy thử nghiệm trên 1-2 tài khoản test trước khi triển khai rộng rãi. Chỉ mở rộng cho tất cả các tài khoản sau khi đã xác minh kỹ.
TIP
🎉 Chúc mừng! Giờ đây bạn đã làm chủ toàn bộ các phương pháp để tạo script tự động hóa cho Mbbrowser bằng cách sử dụng các mô hình AI.
Gặp vấn đề? Tham khảo các chương tương ứng:
- Giao diện không khớp? → Rules Package để xác nhận cách sử dụng APIServer.
- Không có ý tưởng viết script? → Skills Package để tìm các mẫu theo kịch bản.
