0

Local API và CDP khác nhau thế nào khi tự động hóa hàng trăm hồ sơ?

Một bạn dev ở Hà Nội nhắn cho mình đoạn log dài cả màn hình. Bạn ấy viết script Playwright để mở 200 hồ sơ, chạy được khoảng 20 cái thì tiến trình treo, còn phần còn lại phải ngồi bấm tay. "Em tưởng cứ có API là chạy cả lô được, ai ngờ API chỉ cho tạo hồ sơ, còn mở và đóng thì vẫn phải qua giao diện", bạn ấy bảo. Đây là kiểu nhầm lẫn rất dễ gặp, vì chữ API trong ngành này được dùng cho ít nhất ba việc khác nhau.

Mình bảo thử xem lại phần Local API của BitBrowser, dịch vụ chạy ngay trên máy tại địa chỉ 127.0.0.1:54345, có token xác thực và cổng MCP từ bản 7.1.5. Chỗ bạn ấy thiếu không phải là API, mà là nhịp gọi: mở hồ sơ xong phải lấy cổng gỡ lỗi từ xa rồi mới gắn script vào, không thể gom chung một vòng lặp không có kiểm tra trạng thái. Sửa lại thành từng lô nhỏ có chờ và ghi log, script chạy qua đêm êm hẳn.

Có API chưa đủ, phải nhìn tám chỗ

Câu hỏi đáng hỏi hơn là API đi được bao xa trong vòng đời của một hồ sơ. Mình thường so theo tám tiêu chí dưới đây, và luôn thử bằng một đoạn mã thật chứ không đọc mỗi trang giới thiệu.

Hai dòng cuối hay bị bỏ qua nhất. Với API thiết bị đám mây, nhà cung cấp thường giới hạn khoảng một yêu cầu mỗi giây, và các lệnh như bật máy hay đổi máy là bất đồng bộ, tức là lệnh trả về thành công mới chỉ nghĩa là đã nhận lệnh, chưa nghĩa là máy đã sẵn sàng. Nếu script của bạn không gọi thêm lệnh kiểm tra trạng thái, nó sẽ lao vào bước tiếp theo khi thiết bị còn đang khởi động. Đây là lỗi của nhịp điều phối, không phải lỗi của dịch vụ.

So vài sản phẩm theo đúng những tiêu chí đó

Dưới đây là bảng mình gom từ tài liệu công khai của các bên, chỉ nhằm giúp bạn biết nên đọc tiếp chỗ nào. Thứ tự không phải xếp hạng chất lượng tổng thể, vì mỗi đội ưu tiên một việc khác nhau.

Với đội viết script, điểm khác biệt nằm ở chỗ API có chạm được tới cổng CDP hay không. Local API lo việc quản lý hồ sơ, còn CDP là cầu nối để Playwright hay Puppeteer điều khiển trang web bên trong hồ sơ đó. Hai lớp này bổ sung cho nhau. BitBrowser cho phép đi từ một lệnh mở hồ sơ tới địa chỉ WebSocket của CDP, rồi gắn framework tự động hóa vào, nên vòng lặp khép kín. Trợ lý AI qua MCP thì thêm một tầng nữa, nhận lệnh bằng ngôn ngữ tự nhiên để tạo hồ sơ, bật tắt hay đọc trạng thái mà không cần viết từng lời gọi.

import requests
from playwright.sync_api import sync_playwright

BASE = "http://127.0.0.1:54345"
HEADERS = {"x-api-key": "token-cua-ban"}

opened = requests.post(
    BASE + "/browser/open",
    json={"id": "profile-01", "queue": True},
    headers=HEADERS,
    timeout=30,
).json()

ws = opened["data"]["ws"]
with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(ws)
    ctx = browser.contexts[0]
    page = ctx.pages[0] if ctx.pages else ctx.new_page()
    page.goto("https://seller.shopee.vn/")
    print(page.title())
    browser.close()

Đoạn mã trên là dạng ngắn nhất của luồng mình vẫn dùng. Khi chạy trên máy chủ không màn hình, thêm tham số args với --headless và bật ignoreDefaultUrls để cửa sổ không tự mở trang mặc định. Với lô lớn, chia nhỏ theo từng nhóm, thêm thời gian chờ giữa hai lần mở, và ghi lại mã hồ sơ cùng trạng thái vào nhật ký để lúc có lỗi còn biết dừng ở đâu. BitBrowser có sẵn các lệnh lấy danh sách cửa sổ theo trang, danh sách tiến trình đang sống và cổng gỡ lỗi của các cửa sổ đã mở, mấy cái này đủ để dựng một hàng đợi tử tế.

Ai cần gì ở lớp API

Nhóm phát triển và phân tích dữ liệu thường coi mỗi hồ sơ là một tài nguyên có thể mượn rồi trả, nên họ cần danh sách, trạng thái và khả năng thu thập rồi phân tích dữ liệu có kiểm soát, kèm nhật ký rõ ràng. Đội Facebook Ads cần tạo và dừng từng nhánh A/B theo lịch, nên các lệnh sửa proxy hàng loạt và gán nhãn quan trọng hơn vẻ đẹp giao diện. Người bán đa cửa hàng cần nhập hàng loạt từ file Excel và cập nhật Cookie định kỳ. Bên MCN và Zalo OA lại hay cần RPA no-code hơn là code, vì người chạy là nhân viên nội dung, không phải kỹ sư. Cùng một sản phẩm, mỗi nhóm sẽ mở ở một trang tài liệu khác nhau.

Đánh giá API bằng độ phủ vòng đời hồ sơ và khả năng gắn CDP, đừng chỉ hỏi có hay không. Nhịp gọi quan trọng ngang bản thân lệnh, nhất với tác vụ bất đồng bộ và giới hạn tần suất. Và quy trình tự động hóa vẫn phải đi cùng việc tuân thủ quy chuẩn nền tảng, khai báo đúng thông tin, không dùng tự động hóa cho các hành vi tương tác không xác thực.

Nhìn tiếp một hai năm, mình nghĩ lớp API sẽ dần trở thành chỗ AI làm việc thay vì chỗ con người gõ lệnh. MCP đang mở hướng đó: trợ lý đọc nhật ký, tự phát hiện hồ sơ nào vừa đổi proxy mà quên đổi múi giờ, đề xuất lịch chạy lại, rồi hỏi người dùng trước khi sửa. Với người làm nghề, lời khuyên thực tế nhất là coi cấu hình hồ sơ như một dạng mã nguồn, có phiên bản, có nhật ký thay đổi, có bước kiểm tra trước khi đưa vào chạy thật. Khi đội lên từ 20 lên 200 hồ sơ, thứ cứu bạn không phải là thêm một thư viện, mà là việc bạn còn giải thích được hôm qua ai đổi cái gì.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí