Nghiên cứu Bypass CAPTCHA cho OpenClaw Browser Automation
Nghiên cứu Bypass CAPTCHA cho OpenClaw Browser Automation
Ngày: 06/05/2026 | Trọng tâm: DuckDuckGo CAPTCHA, Playwright browser automation (OpenClaw)
Vấn đề
Các agent cron hàng ngày (Trend Analyst, VN Legal Eagle, v.v.) sử dụng công cụ browser của OpenClaw (dựa trên Playwright) để nghiên cứu web. DuckDuckGo thỉnh thoảng hiển thị CAPTCHA cho các request tự động từ cùng IP, chặn hoạt động tìm kiếm.
CAPTCHA của DDG tương đối đơn giản — không phải Cloudflare Turnstile hay reCAPTCHA v3. Nó kích hoạt khi:
- Lượng request cao từ một IP
- Browser fingerprint thiếu hoặc đáng ngờ
navigator.webdriver = true(phát hiện headless)HeadlessChrometrong User-Agent
Các Repo & Công cụ GitHub
1. playwright-stealth (Python) — ⭐ Khuyến nghị chính
- Repo: https://github.com/Granitosaurus/playwright-stealth
- Chức năng: Vá
navigator.webdriver, User-Agent, plugin thiếu, WebGL vendor, codec fingerprints, Chrome runtime objects - Trạng thái: Đang bảo trì tích cực
2. playwright-extra + puppeteer-extra-plugin-stealth (Node.js)
- npm:
playwright-extrav4.3.6 - Chức năng: Hệ thống plugin cho Playwright tải các module né tránh stealth
- Trạng thái: Lần xuất bản gần nhất 3 năm trước — bảo trì đáng ngờ
3. SearXNG — Xử lý DDG CAPTCHA
- Issue: https://github.com/searxng/searxng/issues/3927
- Insight chính: DDG CAPTCHA kích hoạt bởi server-side scraping, không chỉ fingerprint. Khuyến nghị:
- Dùng
https://html.duckduckgo.com/html/(endpoint không JS) - Dùng
https://lite.duckduckgo.com/lite/(siêu nhẹ) - Xử lý đúng tham số
vqd(token chống scraping của DDG) - Giải CAPTCHA một lần từ server IP, cookie sẽ giữ
- Dùng
4. Browserless.io — Cloud Browser API
- URL: https://www.browserless.io/
- Chi phí: Dịch vụ trả phí
- Đánh giá: Quá mức cho use case của chúng ta
Kỹ thuật Áp dụng cho OpenClaw
✅ Profile Persistence (Hiệu quả nhất)
OpenClaw đã hỗ trợ persistent browser profiles (bobbie, trend-scout, v.v.). Khi sử dụng profile:
- Cookie tồn tại qua các phiên (bao gồm cookie "I'm not a robot" của DDG)
- LocalData được giữ lại
- Browser xây dựng "lịch sử tin cậy" với DDG
✅ Sử dụng DDG Lite/HTML Endpoints
Thay vì điều hướng đến duckduckgo.com/?q=..., dùng:
https://html.duckduckgo.com/html/?q=query— chỉ HTML, không JShttps://lite.duckduckgo.com/lite/?q=query— siêu tối giản- Các endpoint này hiếm khi kích hoạt CAPTCHA
Ưu tiên tool web_search (dùng DDG API trực tiếp) thay vì điều hướng browser đến DDG.
✅ Giới hạn Tốc độ giữa các Request
- Thêm delay giữa các lần điều hướng browser đến DDG (tối thiểu 2-5 giây)
- Vấn đề thường là burst request trong một lần chạy
✅ JavaScript Evasion Injection
Inject trước khi tải trang qua browser act: evaluate:
Object.defineProperty(navigator, 'webdriver', { get: () => false });
⚠️ User-Agent Spoofing
- Đặt UA Chrome thực tế, không có marker
HeadlessChrome
⚠️ Proxy Rotation
- Chi phí: $5-50/tháng cho residential proxy pools
- Chỉ khi CAPTCHA trở thành vấn đề liên tục
❌ Dịch vụ Giải CAPTCHA (Không Khuyến nghị)
- 2Captcha, CapSolver: $1-3/1000 lần giải
- Chậm (15-30 giây/lần)
- Vi phạm ToS của DDG
Khuyến nghị Thực tế cho solo.engineer
Ngay lập tức (Không cần thay đổi code):
- Dùng
web_searchthay vì browser — truy cập DDG API backend trực tiếp - Dùng
web_fetchcho URL đã biết — bỏ qua tìm kiếm hoàn toàn - Giữ persistent browser profiles — không xóa cookie giữa các lần chạy agent
Ngắn hạn (Config nhỏ):
- Thêm delay trong agent prompts — "Đợi 3 giây giữa các lần tải DDG"
- Dùng DDG lite/html endpoints khi browser search không thể tránh
- Đặt User-Agent thực tế trên browser profiles
Trung hạn (Nếu CAPTCHA kéo dài):
- Cân nhắc self-hosted SearXNG — proxy meta-search, xử lý DDG CAPTCHA nội bộ
- Thêm Playwright launch flags:
--disable-blink-features=AutomationControlled - Inject stealth JS evasions trước khi tải trang
Kết luận Chính
Tool web_search đã bypass DDG CAPTCHA hoàn toàn vì nó dùng DDG API backend, không phải browser frontend. CAPTCHA chỉ ảnh hưởng khi agent điều hướng đến duckduckgo.com trong browser. Giải pháp: dùng web_search để tìm kiếm, web_fetch để lấy trang đã biết, chỉ dùng browser khi cần JS rendering hoặc login state.
Nguồn: SearXNG issue #3927, Scrapfly stealth guide (2026-04-28), playwright-stealth PyPI, playwright-extra npm, Browserless docs