browser-use: agent điều khiển trình duyệt bằng mục tiêu ngôn ngữ tự nhiên
Tóm tắt
browser-use cho agent thao tác trình duyệt theo mục tiêu bằng lời thay vì script cứng. Hợp với việc mà script giòn hoặc không đáng viết, nhưng tốn token, kém ổn định và phải chạy với quyền tối thiểu.
Nhiều việc lặp lại vẫn chỉ làm được qua trình duyệt: tra cứu trên cổng thông tin không có API, điền form nội bộ, so giá trên vài website, kiểm tra một luồng đăng ký. Script Selenium/Playwright truyền thống làm được nhưng giòn: website đổi một class CSS là hỏng. browser-use (repo browser-use/browser-use, giấy phép MIT) đi theo hướng khác: bạn mô tả mục tiêu bằng ngôn ngữ tự nhiên, một LLM nhìn trang và tự quyết định click, gõ, cuộn. README gọi nó là "the open-source browser agent".
Ba cách sử dụng
| Cách | Mô tả | Phù hợp |
|---|---|---|
| Thư viện Python | Chạy agent mã nguồn mở trong ứng dụng của bạn, tự chọn model, thêm tool riêng | Dev muốn kiểm soát hoàn toàn |
| CLI | Cấp quyền dùng trình duyệt cho agent sẵn có như Claude Code, Codex (cài dạng skill) | Muốn coding agent "nhìn" được web app |
| Cloud | Gửi task qua API; Browser Use chạy cả agent lẫn trình duyệt | Không muốn tự vận hành trình duyệt |
Bắt đầu với thư viện
Yêu cầu Python 3.11+. README dùng uv:
uv init --python 3.12
uv add browser-use
# thêm API key vào .env, ví dụ ANTHROPIC_API_KEY=...
Một agent tối giản (viết lại theo cấu trúc trong README, dùng Claude):
import asyncio
from browser_use import Agent, ChatAnthropic
async def main():
agent = Agent(
task="Vào trang GitHub của browser-use và cho biết số star hiện tại",
llm=ChatAnthropic(model="claude-sonnet-5-5"),
)
result = await agent.run()
print(result)
asyncio.run(main())
Về model, README liệt kê: model riêng BU2 của Browser Use (được tối ưu cho tác vụ trình duyệt và được khuyến nghị), wrapper trực tiếp ChatOpenAI, ChatAnthropic, ChatGoogle, và model chạy local qua Ollama (chất lượng phụ thuộc phần cứng).
Thêm tool riêng
Agent không nên làm mọi thứ bằng click. Khi có API nội bộ hoặc cần lưu kết quả, đăng ký hàm Python làm tool bằng Tools() và decorator @tools.action(...), rồi truyền vào Agent(tools=...). Mẫu kết hợp tốt: trình duyệt để đọc dữ liệu từ nơi không có API, tool riêng để ghi vào hệ thống của bạn theo cách có kiểm soát.
Use case thực tế
- Thu thập dữ liệu từ cổng không có API: tra trạng thái đơn, hoá đơn, lịch hẹn rồi xuất JSON.
- Smoke test bằng ngôn ngữ tự nhiên: "đăng ký tài khoản mới, kiểm tra email xác nhận có hiện thông báo".
- Nghiên cứu thị trường: so giá/tính năng trên vài website, tổng hợp thành bảng.
- Cho coding agent kiểm tra UI: sau khi sửa frontend, agent tự mở trang và xác nhận.
Chi phí
Thư viện miễn phí, nhưng mỗi bước của agent là một lần gọi LLM có kèm trạng thái trang, nên một task 20 bước tốn hơn nhiều so với một lần gọi API thông thường. Trình duyệt cloud tính phí riêng (README nêu khoảng $0.02/giờ, kèm stealth, proxy, xử lý CAPTCHA, nhưng không cam kết giải được mọi CAPTCHA).
Rủi ro và lưu ý bảo mật
- Prompt injection từ web: agent đọc nội dung trang và có thể bị "ra lệnh" bởi văn bản ẩn. Không giao cho agent phiên đăng nhập có quyền chuyển tiền hay xoá dữ liệu.
- Dữ liệu nhạy cảm trong lịch sử: README lưu ý file lịch sử chạy có thể chứa dữ liệu nhạy cảm. Dùng
sensitive_datađể truyền secret dạng placeholder, nhưng snapshot trang vẫn có thể lộ thông tin; giữ file riêng tư. - Profile sync chỉ chuyển cookie, không chuyển local storage/IndexedDB, nên một số trang sẽ đòi đăng nhập lại.
- Điều khoản website: tự động hoá có thể vi phạm ToS của trang đích. Kiểm tra trước khi chạy định kỳ.
- Không xác định: cùng một task có thể đi đường khác nhau mỗi lần. Việc cần kết quả ổn định 100% vẫn nên dùng script Playwright truyền thống.
Áp dụng thế nào?
- Dev: Dùng browser-use cho phần "khám phá" và việc ít lặp; khi luồng đã ổn định, cân nhắc chuyển sang script Playwright cố định để rẻ và chắc hơn.
- Tech Lead: Chạy agent trong môi trường cách ly, với tài khoản quyền tối thiểu. Ghi log từng bước để audit.
- PM: Rất hợp để prototype tự động hoá quy trình vận hành (back-office) trước khi đầu tư tích hợp API thật.
Nguồn & tham khảo
- browser-use — GitHub repository — Browser Use