Chrome headless chạy mà không có cửa sổ hiển thị — nhanh, nhẹ, hoàn hảo cho máy chủ. Nhưng hệ thống CAPTCHA chủ động phát hiện chế độ headless. Đây là cách chọn chế độ phù hợp và giải CAPTCHA ở cả hai.
So sánh nhanh
| Yếu tố | Chrome headless | Chrome có giao diện |
|---|---|---|
| Tốc độ | Nhanh chóng (không có chi phí hiển thị) | Chậm hơn (hiển thị giao diện người dùng) |
| Ký ức | ~100-200MB | ~300-500MB |
| Triển khai máy chủ | Bản địa | Yêu cầu hiển thị ảo |
| Phát hiện CAPTCHA | Cao (tín hiệu có thể phát hiện) | Thấp (trông giống người dùng thật) |
| Điểm reCAPTCHA v3 | 0,1-0,3 (phạm vi bot) | 0,7-0,9 (phạm vi con người) |
| Gỡ lỗi | Khó hơn (không có hình ảnh) | Dễ dàng (xem trang) |
| Tỷ lệ | Tuyệt vời (tài nguyên thấp) | Nặng về tài nguyên |
Cách CAPTCHA phát hiện Chrome headless
Tín hiệu phát hiện
// Tests that CAPTCHA systems run
// 1. WebDriver flag (biggest tell)
thuộc tính WebDriver chuẩn // 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ả kiểm tra phát hiện
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)
Chế độ "Không đầu mới" của Chrome (v112+)
Chrome 112+ đã giới thiệu --headless=new, sử dụng cùng cơ sở mã với Chrome:
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ế độ headless mới sửa một số vectơ phát hiện nhưng vẫn hiển thị thuộc tính WebDriver chuẩn và không có plugin.
Không đầu + CaptchaAI (Python)
CaptchaAI hoạt động tốt như nhau ở chế độ headless vì nó giải CAPTCHA phía máy chủ — chế độ trình duyệt không ảnh hưởng đến API giải:
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()
Hướng tới máy chủ (Hiển thị ảo)
Chạy Chrome có đầu trên các máy chủ headless bằng Xvfb:
Linux với Xvfb
# Install
sudo apt-get install xvfb
# Run with virtual display
xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" python script.py
Python với PyVirtualDisplay
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
Docker với 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"]
Bản vá headless + tàng hình (Node.js)
const puppeteer = require("puppeteer-extra");
const StealthPlugin = require("puppeteer (cấu hình QA)");
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();
}
Khi nào nên sử dụng từng chế độ
Sử dụng headless khi:
- Chạy trên máy chủ/CI không hiển thị
- Mở rộng tới hơn 50 phiên đồng thời
- Trí nhớ bị hạn chế
- CaptchaAI xử lý tất cả việc giải CAPTCHA (chế độ trình duyệt không liên quan)
Sử dụng tiêu đề khi:
- Gỡ lỗi CAPTCHA một cách trực quan
- Điểm số của reCAPTCHA v3 rất quan trọng (điểm cao hơn khi đánh đầu)
- Chặn trang web mục tiêu cụ thể
- Chạy trên máy có màn hình
Sử dụng Headed + Hiển thị ảo khi:
- Cần khả năng chống phát hiện ở cấp độ đầu trên máy chủ
- reCAPTCHA v3 cho điểm thấp ở nội dung headless
- Ngân sách cho phép bổ sung bộ nhớ (~2 lần mỗi phiên)
Điểm chuẩn hiệu suất
| Kịch bản | Không đầu | đánh đầu | Đánh đầu + Xvfb |
|---|---|---|---|
| thời gian khởi động | ~1 giây | ~2 giây | ~2,5 giây |
| Bộ nhớ trên mỗi tab | 100-200MB | 300-500 MB | 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 |
| Đồng thời tối đa (8GB) | 30-40 | 10-15 | 10-15 |
| Tỷ lệ giải quyết CAPTCHA | Tương tự (API) | Tương tự (API) | Tương tự (API) |
Thông tin chi tiết quan trọng: Tỷ lệ giải quyết CaptchaAI là như nhau bất kể chế độ trình duyệt. Chế độ này chỉ ảnh hưởng đến tần suất CAPTCHA xuất hiện và điểm reCAPTCHA v3.
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Phát hiện headless | Cờ thuộc tính WebDriver chuẩn |
Sử dụng plugin ẩn hoặc bản vá CDP |
| Điểm v3 thấp ở chế độ headless | Thiếu tín hiệu kết xuất | Chuyển sang đầu + Xvfb |
| tai nạn Xvfb | Hiển thị xung đột số | Sử dụng --auto-servernum |
| Bộ nhớ cao trong đầu | quá trình GPU | Thêm cờ --disable-gpu |
| Ảnh chụp màn hình trống ở chế độ headless | Chế độ xem sai | Đặt --window-size=1920,1080 |
Câu hỏi thường gặp
CaptchaAI có quan tâm đến việc tôi sử dụng headless hay có đầu không?
Không. CaptchaAI giải quyết phía máy chủ CAPTCHA bằng cách sử dụng khóa trang web và URL. Chế độ trình duyệt không ảnh hưởng đến việc giải quyết.
Chế độ headless mới (--headless=new) có an toàn không bị phát hiện?
Nó tốt hơn cái headless cũ nhưng vẫn có thể phát hiện được. Các trang web kiểm tra thuộc tính WebDriver chuẩn hoặc số lượng plugin vẫn sẽ gắn cờ nó.
Tôi có thể đạt được điểm reCAPTCHA v3 trên 0,7 khi không có đầu không?
Hiếm khi. Chế độ headless tạo ra tín hiệu giống bot. Sử dụng head + Xvfb để có điểm cao hơn hoặc sử dụng giải pháp v3 của CaptchaAI để trả về mã thông báo điểm cao.
Tôi có nên đầu tư vào các bản vá ẩn hay chỉ sử dụng CaptchaAI?
Cả hai. Tính năng tàng hình làm giảm tần suất CAPTCHA (ít giải quyết hơn = chi phí thấp hơn). CaptchaAI xử lý các CAPTCHA vẫn xuất hiện.
Hướng dẫn liên quan
- Dấu vân tay trình duyệt và CAPTCHA
- Puppeteer tàng hình + CaptchaAI
- Giao thức DevTools của Chrome + CaptchaAI
Chọn chế độ trình duyệt phù hợp cho quy trình làm việc CAPTCHA của bạn —lấy khóa CaptchaAI của bạnvà giải CAPTCHA ở mọi cấu hình.