Chrome headless nhanh và nhẹ, nhưng gần như mọi hệ thống CAPTCHA hiện đại đều nhận ra bạn đang chạy headless. Chrome có giao diện thì ngược lại — chậm hơn, tốn bộ nhớ hơn, nhưng CAPTCHA "tin" bạn là người thật hơn nhiều. CaptchaAI không quan tâm bạn chọn chế độ nào vì việc giải diễn ra phía server, nhưng chế độ trình duyệt vẫn quyết định tần suất CAPTCHA xuất hiện và độ khó trước khi bạn gọi API.
So sánh nhanh
| Yếu tố | Chrome headless | Chrome có giao diện |
|---|---|---|
| Tốc độ | Nhanh (không render UI) | Chậm hơn |
| Bộ nhớ | ~100-200MB | ~300-500MB |
| Triển khai server | Chạy trực tiếp | Cần màn hình ảo (Xvfb) |
| Bị CAPTCHA phát hiện | Cao | Thấp |
| Điểm reCAPTCHA v3 | 0,1-0,3 (vùng bot) | 0,7-0,9 (vùng người) |
| Gỡ lỗi | Khó (không xem được) | Dễ |
| Khả năng mở rộng | Rất tốt | Tốn tài nguyên |
Nên chọn chế độ nào cho từng tình huống?
| Tình huống | Chế độ nên dùng |
|---|---|
| Server/CI-CD không có màn hình, cần 50+ phiên song song | Headless |
| Bộ nhớ server hạn chế | Headless |
| Cần gỡ lỗi luồng CAPTCHA bằng mắt thường | Có giao diện |
| Điểm reCAPTCHA v3 là yếu tố sống còn | Có giao diện |
| Trang đích chặn riêng traffic headless | Có giao diện |
| Cần độ tin cậy như có giao diện nhưng vẫn chạy trên server không màn hình | Có giao diện + Xvfb |
| reCAPTCHA v3 vẫn cho điểm thấp dù đã thử headless thuần | Có giao diện + Xvfb |
CaptchaAI giải CAPTCHA như nhau ở mọi hàng trong bảng — chỉ chế độ trình duyệt là khác, việc gọi API không đổi.
Ví dụ ở các đội QA/automation outsource tại TP.HCM, Hà Nội (FPT Software, VNG, startup scraping giá sàn thương mại điện tử): theo dõi giá Shopee, Lazada, Tiki quy mô hàng nghìn phiên/ngày thường ưu tiên headless để tiết kiệm chi phí server, chấp nhận CAPTCHA xuất hiện thường xuyên hơn rồi để CaptchaAI giải. Gói BASIC ($15/tháng, 5 thread) đã đủ cho quy mô vừa.
Vì sao CAPTCHA phát hiện được Chrome headless
Các tín hiệu mà CAPTCHA kiểm tra
Anti-bot chạy sẵn một loạt script kiểm tra thuộc tính trình duyệt ngay khi trang tải xong:
// Tests that CAPTCHA systems run
// 1. WebDriver flag (biggest tell)
navigator.webdriver // true in headless, undefined in real browser
// 2. Chrome object completeness
window.chrome // Missing or incomplete in headless
// 3. Plugins
navigator.plugins.length // 0 in headless, 3+ in headed
// 4. WebGL renderer
// Headless: "SwiftShader Renderer"
// Headed: "ANGLE (NVIDIA GeForce GTX 1080...)"
// 5. User-Agent contains "Headless"
navigator.userAgent.includes("Headless") // Old Chrome versions
// 6. Screen dimensions
screen.width === 0 // Some headless configs
// 7. Notification permission
Notification.permission // "denied" in headless without override
Kết quả đo thực tế theo từng chế độ
So sánh ba chế độ trên cùng bộ tín hiệu:
Signal Headed Headless New Headless (v112+)
─────────────────────────────────────────────────────────────
webdriver false true true
chrome object full partial improved
plugins 5 0 0
WebGL renderer ANGLE Swift Swift
screen.width 1920 800 800
UA "HeadlessChrome" no yes no (removed)
Cờ webdriver vẫn true ở cả hai chế độ headless, kể cả bản mới — đây vẫn là tín hiệu chặn đáng tin cậy nhất với site.
Chế độ headless mới của Chrome (v112+) giải quyết được gì?
Từ Chrome 112, --headless=new dùng chung codebase render với bản có giao diện thay vì một engine riêng như trước:
from selenium import webdriver
# Old headless (more detectable)
options = webdriver.ChromeOptions()
options.add_argument("--headless") # Legacy mode
# New headless (less detectable)
options = webdriver.ChromeOptions()
options.add_argument("--headless=new") # Shares headed rendering
driver = webdriver.Chrome(options=options)
Chế độ mới vá được vài vector phát hiện nhưng cờ
webdrivervẫn lộ và plugin vẫn trống — đừng kỳ vọng nó "qua mặt" hoàn toàn hệ thống chống bot.
Giải CAPTCHA khi chạy Chrome headless bằng CaptchaAI (Python)
import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
API_KEY = "YOUR_API_KEY"
API_URL = "https://ocr.captchaai.com"
def create_headless_driver():
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("")
options.add_argument("--window-size=1920,1080")
options.add_argument(
"--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
)
return webdriver.Chrome(options=options)
def solve_captcha(site_url, sitekey):
resp = requests.post(f"{API_URL}/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"json": 1,
})
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{API_URL}/res.php", params={
"key": API_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Solve timeout")
# Full headless workflow
driver = create_headless_driver()
try:
driver.get("https://example.com/form")
time.sleep(2)
sitekey = driver.execute_script(
"return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
)
if sitekey:
token = solve_captcha(driver.current_url, sitekey)
driver.execute_script(f"""
document.querySelector('#g-recaptcha-response').value = '{token}';
""")
driver.find_element(By.CSS_SELECTOR, "form").submit()
finally:
driver.quit()
Luồng này chạy đúng cho cả hai chế độ vì CaptchaAI giải ở phía server dựa trên sitekey và pageurl — chỉ khác nhau ở cách khởi tạo driver, tốc độ và chất lượng giải không đổi.
Chạy Chrome có giao diện trên server bằng Xvfb
Cần điểm reCAPTCHA v3 tốt hơn nhưng server không có màn hình vật lý? Dựng màn hình ảo và chạy Chrome có giao diện bên trong nó.
Cài Xvfb trên Linux
# Install
sudo apt-get install xvfb
# Run with virtual display
xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" python script.py
Dùng PyVirtualDisplay trong Python
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(1920, 1080))
display.start()
options = webdriver.ChromeOptions()
# No --headless flag = headed mode in virtual display
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1920,1080")
driver = webdriver.Chrome(options=options)
# Now runs headed Chrome with real rendering, but no physical display
Đóng gói bằng Docker + Xvfb
FROM python:3.12-slim
RUN apt-get update && apt-get install -y \
xvfb \
chromium \
chromium-driver \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . /app
WORKDIR /app
CMD ["xvfb-run", "--auto-servernum", "python", "main.py"]
Vá lỗi phát hiện headless trong cấu hình QA (Node.js)
const puppeteer = require("puppeteer-extra");
const StealthPlugin = require("puppeteer-extra-plugin-stealth");
puppeteer.use(StealthPlugin());
async function headlessStealth() {
const browser = await puppeteer.launch({
headless: "new",
args: [
"--no-sandbox",
"--window-size=1920,1080",
"",
],
});
const page = await browser.newPage();
await page.setViewport({ width: 1920, height: 1080 });
// Additional stealth patches
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, "webdriver", {
get: () => undefined,
});
Object.defineProperty(navigator, "plugins", {
get: () => [1, 2, 3, 4, 5],
});
});
await page.goto("https://example.com/form");
// Detect and solve CAPTCHA with CaptchaAI
const sitekey = await page.evaluate(() =>
document.querySelector("[data-sitekey]")?.getAttribute("data-sitekey")
);
if (sitekey) {
// Call CaptchaAI API (see other guides for full implementation)
const token = await solveCaptchaAI(page.url(), sitekey);
await page.evaluate((t) => {
document.querySelector("#g-recaptcha-response").value = t;
}, token);
}
await browser.close();
}
Các bản vá này giảm tần suất CAPTCHA, không thay thế việc giải — CaptchaAI vẫn xử lý những CAPTCHA lọt qua.
Đo hiệu năng: headless và có giao diện khác nhau bao nhiêu?
| Kịch bản | Headless | Có giao diện | Có giao diện + Xvfb |
|---|---|---|---|
| Thời gian khởi động | ~1 giây | ~2 giây | ~2,5 giây |
| Bộ nhớ mỗi tab | 100-200MB | 300-500MB | 300-500MB |
| Tải trang (trung bình) | 1,5 giây | 2,5 giây | 2,5 giây |
| Điểm reCAPTCHA v3 | 0,1-0,3 | 0,7-0,9 | 0,5-0,8 |
| Số phiên tối đa (8GB RAM) | 30-40 | 10-15 | 10-15 |
| Tỷ lệ giải CAPTCHA | Như nhau (qua API) | Như nhau (qua API) | Như nhau (qua API) |
Tỷ lệ giải của CaptchaAI không đổi bất kể chế độ trình duyệt nào — chế độ chỉ quyết định CAPTCHA xuất hiện thường xuyên ra sao và điểm reCAPTCHA v3 cao hay thấp.
Xử lý các lỗi thường gặp
- Bị phát hiện chạy headless — cờ
webdriverlộ → dùng cấu hình QA chuẩn hoặc vá qua CDP. - Điểm v3 thấp khi headless — thiếu tín hiệu render thật → chuyển sang có giao diện + Xvfb.
- Xvfb bị crash — xung đột số hiệu display → thêm cờ
--auto-servernum. - Bộ nhớ tăng cao khi có giao diện — tiến trình GPU chạy nền → thêm cờ
--disable-gpu. - Ảnh chụp màn hình trống khi headless — sai viewport → đặt
--window-size=1920,1080.
Câu hỏi thường gặp
CaptchaAI có cần biết bạn dùng Chrome headless hay có giao diện không?
Không. CaptchaAI giải phía server dựa trên sitekey và pageurl — chế độ trình duyệt không ảnh hưởng.
Vì sao điểm reCAPTCHA v3 giảm mạnh khi chuyển sang headless?
Headless thiếu tín hiệu render thật (WebGL, plugin, kích thước màn hình) mà v3 dùng để chấm điểm. Dùng có giao diện + Xvfb hoặc để CaptchaAI trả token điểm cao.
Chạy Chrome headless trên CI/CD để giải CAPTCHA có ổn không?
Có, đây là cách phổ biến nhất vì GitHub Actions hay GitLab CI không có màn hình — chỉ cần tính trước số thread cần dùng.
Xvfb báo lỗi display bị trùng thì xử lý thế nào?
Thêm cờ --auto-servernum để Xvfb tự chọn số hiệu display trống, tránh xung đột khi chạy nhiều tiến trình song song.
Gói BASIC (5 thread) có đủ chạy song song nhiều phiên headless không?
Đủ cho khối lượng vừa. Vượt quá 5 phiên song song, nâng lên STANDARD ($30/tháng, 15 thread) hoặc ADVANCE ($90/tháng, 50 thread).
Hướng dẫn liên quan
Đọc thêm về vân tay trình duyệt, cấu hình automation và DevTools khi làm việc với CaptchaAI:
- Kiểm thử CAPTCHA trong QA được ủy quyền
- Puppeteer cấu hình nâng cao + CaptchaAI
- Giao thức DevTools của Chrome + CaptchaAI
Chọn chế độ trình duyệt phù hợp với hạ tầng của bạn — lấy API key CaptchaAI và giải CAPTCHA ở bất kỳ cấu hình nào.