المقارنات

Headless vs Headed Chrome لحل اختبار CAPTCHA

يعمل Chrome بدون رأس بدون نافذة مرئية، فهو سريع وخفيف الوزن ومثالي للخوادم. لكن أنظمة CAPTCHA تكتشف بشكل فعال وضع مقطوعة الرأس. فيما يلي كيفية اختيار الوضع الصحيح وحل اختبارات CAPTCHA في كليهما.


مقارنة سريعة

عامل كروم مقطوعة الرأس ترأس كروم
السرعة سريع (لا يوجد عرض إضافي) أبطأ (يعرض واجهة المستخدم)
الذاكرة ~100-200 ميجابايت ~300-500 ميجابايت
نشر الخادم أصلي يتطلب العرض الظاهري
** كشف CAPTCHA ** عالية (إشارات قابلة للاكتشاف) منخفض (يشبه المستخدم الحقيقي)
** نقاط reCAPTCHA v3 ** 0.1-0.3 (نطاق الروبوتات) 0.7-0.9 (المدى البشري)
** التصحيح ** أصعب (بدون رؤية) سهل (انظر الصفحة)
** التحجيم ** ممتاز (موارد منخفضة) كثيفة الموارد

كيف تكتشف اختبارات CAPTCHA Chrome مقطوعة الرأس

إشارات الكشف

// 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

نتائج اختبار الكشف

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)

وضع "مقطوعة الرأس الجديد" في Chrome (الإصدار 112+)

قدم Chrome 112+ --headless=new، والذي يستخدم نفس قاعدة التعليمات البرمجية مثل 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)

يعمل وضع مقطوعة الرأس الجديد على إصلاح بعض متجهات الكشف ولكنه لا يزال يكشف navigator.webdriver ولا يحتوي على مكونات إضافية.


مقطوعة الرأس + CaptchaAI (Python)

يعمل CaptchaAI بشكل جيد بنفس القدر في الوضع بدون رأس لأنه يحل جانب خادم اختبار CAPTCHA - ولا يؤثر وضع المتصفح على واجهة برمجة التطبيقات للحل:

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("--disable-blink-features=AutomationControlled")
    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()

موجه على الخوادم (العرض الظاهري)

قم بتشغيل Chrome ذو الرأس على خوادم بدون رأس باستخدام Xvfb:

لينكس مع Xvfb

# Install
sudo apt-get install xvfb

# Run with virtual display
xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" python script.py

بايثون مع 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

عامل ميناء مع 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"]

تصحيحات مقطوعة الرأس + مخفية (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",
      "--disable-blink-features=AutomationControlled",
    ],
  });

  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();
}

متى تستخدم كل وضع

استخدم مقطوعة الرأس عندما:

  • يعمل على خوادم/CI بدون عرض
  • التوسع إلى أكثر من 50 جلسة متزامنة
  • الذاكرة محدودة
  • يتعامل CaptchaAI مع جميع حلول اختبار CAPTCHA (وضع المتصفح غير ذي صلة)

استخدم العنوان عندما:

  • تصحيح أخطاء اختبار CAPTCHA يتدفق بشكل مرئي
  • نتائج reCAPTCHA v3 مهمة (أعلى الدرجات في الضربات الرأسية)
  • كتل الموقع المستهدفة مقطوعة الرأس على وجه التحديد
  • تعمل على الأجهزة مع شاشات العرض

استخدم العرض الرأسي + العرض الظاهري عندما:

  • تحتاج إلى مقاومة الكشف على مستوى الرأس على الخوادم
  • reCAPTCHA v3 يعطي درجات منخفضة في مقطوعة الرأس
  • تسمح الميزانية بالذاكرة الإضافية (حوالي 2x لكل جلسة)

معايير الأداء

السيناريو مقطوعة الرأس ترأس ترأس + Xvfb
وقت بدء التشغيل ~1 ثانية ~ 2 ثانية ~2.5 ثانية
الذاكرة لكل علامة تبويب 100-200 ميجابايت 300-500 ميجابايت 300-500 ميجابايت
تحميل الصفحة (متوسط) 1.5 ثانية 2.5 ثانية 2.5 ثانية
نقاط reCAPTCHA v3 0.1-0.3 0.7-0.9 0.5-0.8
الحد الأقصى المتزامن (8 جيجابايت) 30-40 10-15 10-15
معدل حل اختبار CAPTCHA نفس (واجهة برمجة التطبيقات) نفس (واجهة برمجة التطبيقات) نفس (واجهة برمجة التطبيقات)

الرؤية الرئيسية: معدلات حل CaptchaAI متطابقة بغض النظر عن وضع المتصفح. يؤثر الوضع فقط على عدد مرات ظهور اختبارات CAPTCHA ونتائج reCAPTCHA v3.


استكشاف الأخطاء وإصلاحها

المشكلة السبب الإجراء
تم الكشف عن مقطوعة الرأس علم navigator.webdriver استخدم البرنامج المساعد الخفي أو تصحيحات CDP
درجات v3 منخفضة في مقطوعة الرأس إشارات التقديم مفقودة قم بالتبديل إلى head + Xvfb
تحطم Xvfb عرض تعارض في الأرقام استخدم --auto-servernum
ذاكرة عالية في الرأس عملية GPU إضافة علامة --disable-gpu
لقطات فارغة في مقطوعة الرأس منفذ عرض خاطئ قم بتعيين --window-size=1920,1080

الأسئلة الشائعة

هل يهتم CaptchaAI إذا استخدمت رأسًا أو رأسًا؟

لا، CaptchaAI يحل جانب خادم اختبار CAPTCHA باستخدام مفتاح الموقع وعنوان URL. وضع المتصفح لا يؤثر على الحل.

هل وضع مقطوعة الرأس الجديد (--headless=new) آمن من الاكتشاف؟

إنه أفضل من القديم مقطوع الرأس ولكن لا يزال من الممكن اكتشافه. المواقع التي تتحقق من navigator.webdriver أو عدد المكونات الإضافية ستظل تضع علامة عليها.

هل يمكنني الحصول على درجات reCAPTCHA v3 أعلى من 0.7 بدون رأس؟

نادرا. يُنتج وضع مقطوعة الرأس إشارات تشبه الروبوتات. استخدم head + Xvfb للحصول على درجات أعلى، أو استخدم حل CaptchaAI v3 الذي يُرجع رموزًا عالية الدرجات.

هل يجب أن أستثمر في تصحيحات التخفي أم أستخدم CaptchaAI فقط؟

كلاهما. يقلل التخفي من تكرار اختبار CAPTCHA (حلول أقل = تكلفة أقل). يعالج CaptchaAI اختبارات CAPTCHA التي لا تزال تظهر.


أدلة ذات صلة


اختر وضع المتصفح المناسب لسير عمل اختبار CAPTCHA الخاص بك —احصل على مفتاح CaptchaAI الخاص بكوحل اختبارات CAPTCHA بأي تكوين.

التعليقات غير مفعّلة لهذا المقال.