So Sánh

Chrome không có đầu và có đầu để giải CAPTCHA

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


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.

Os comentários estão desativados para este artigo.