حالات الاستخدام

مشاكل وحلول CAPTCHA في المتصفح بدون رأس

تقوم المتصفحات بدون رأس بتشغيل اختبارات CAPTCHA أكثر من المتصفحات العادية. تكتشف المواقع متصفحات Chrome وFirefox وWebKit مقطوعة الرأس من خلال بصمات JavaScript وتطرح تحديات لمنع الأتمتة. وإليك كيفية التعامل مع كل مشكلة.

لماذا تحصل المتصفحات بدون رأس على المزيد من اختبارات CAPTCHA؟

طريقة الكشف ما هي المواقع التي تحقق
navigator.webdriver اضبط على true في وضع مقطوعة الرأس
أبعاد النافذة غالبًا ما يستخدم Headless 800x600 الافتراضي
عارض WebGL عودة مقطوعة الرأس "SwiftShader"
بروتوكول Chrome DevTools منفذ CDP مفتوح
المكونات الإضافية المفقودة لا يوجد عارض PDF أو فلاش وما إلى ذلك.
واجهة برمجة تطبيقات الأذونات ردود مختلفة في مقطوعة الرأس
سلسلة وكيل المستخدم السلسلة الفرعية "HeadlessChrome".

عندما تجتمع هذه الإشارات، تقوم أنظمة مكافحة الروبوتات (reCAPTCHA وCloudflare وDataDome) بتعيين درجات ثقة أقل وإظهار اختبارات CAPTCHA.

الحل 1: حل اختبارات CAPTCHA عبر واجهة برمجة التطبيقات

بدلًا من محاولة تجنب اختبارات CAPTCHA تمامًا، قم بحلها عند ظهورها. يعمل CaptchaAI مع أي متصفح بدون رأس لأنه يحل جانب خادم اختبار CAPTCHA.

السيلينيوم (Python)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
import time

API_KEY = "YOUR_API_KEY"

options = Options()
options.add_argument("--headless=new")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)

driver.get("https://example.com/login")

# Check for CAPTCHA
recaptcha = driver.find_elements("class name", "g-recaptcha")
if recaptcha:
    site_key = recaptcha[0].get_attribute("data-sitekey")

    # Solve via CaptchaAI
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": site_key, "pageurl": driver.current_url
    })
    task_id = resp.text.split("|")[1]

    while True:
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY": continue
        token = result.text.split("|")[1]
        break

    # Inject token
    driver.execute_script(
        f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
    )
    driver.find_element("css selector", "form").submit()

Puppeteer (Node.js)

const puppeteer = require("puppeteer");
const axios = require("axios");

const API_KEY = "YOUR_API_KEY";

const browser = await puppeteer.launch({ headless: "new" });
const page = await browser.newPage();
await page.goto("https://example.com/login");

// Check for CAPTCHA
const siteKey = await page
  .$eval(".g-recaptcha", (el) => el.getAttribute("data-sitekey"))
  .catch(() => null);

if (siteKey) {
  const submit = await axios.get("https://ocr.captchaai.com/in.php", {
    params: {
      key: API_KEY,
      method: "userrecaptcha",
      googlekey: siteKey,
      pageurl: page.url(),
    },
  });
  const taskId = submit.data.split("|")[1];

  let token;
  while (true) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: taskId },
    });
    if (result.data === "CAPCHA_NOT_READY") continue;
    token = result.data.split("|")[1];
    break;
  }

  await page.evaluate((t) => {
    document.getElementById("g-recaptcha-response").innerHTML = t;
  }, token);
  await page.click('button[type="submit"]');
}

الحل 2: تقليل تكرار اختبار CAPTCHA

بينما يمكنك دائمًا حل اختبارات CAPTCHA عبر واجهة برمجة التطبيقات (API)، فإن تقليل عدد مرات ظهورها يوفر الوقت والتكلفة.

# Selenium
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
// Puppeteer
await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, "webdriver", { get: () => false });
});

ضبط حجم النافذة الواقعي

# Selenium
driver.set_window_size(1920, 1080)
// Puppeteer
await page.setViewport({ width: 1920, height: 1080 });

استخدم الإضافات الخفية

# Puppeteer
npm install puppeteer-extra puppeteer-extra-plugin-stealth
const puppeteer = require("puppeteer-extra");
const StealthPlugin = require("puppeteer-extra-plugin-stealth");
puppeteer.use(StealthPlugin());
# Selenium
pip install undetected-chromedriver
import undetected_chromedriver as uc
driver = uc.Chrome(headless=True)

الحل 3: التعامل مع Cloudflare Challenge

تتطلب صفحات تحدي Cloudflare أكثر من مجرد رمز مميز – فأنت بحاجة إلى ملف تعريف الارتباط cf_clearance:

# CaptchaAI handles full Cloudflare challenges
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com",
    "proxy": "http://user:pass@proxy:port",
    "proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]

# Result includes cf_clearance cookie and user_agent
# Use both to make subsequent requests

المشكلات الشائعة بواسطة المتصفح

المتصفح قضية إصلاح
كروم مقطوعة الرأس navigator.webdriver = true استخدم علامة --disable-blink-features
Puppeteer المكونات الإضافية للمتصفح مفقودة استخدم puppeteer-extra-plugin-stealth
السيلينيوم التبديل enable-automation excludeSwitches: ["enable-automation"]
Playwright بصمة ويب كيت استخدم قناة Chromium مع تصحيحات التخفي
الكل حجم إطار العرض ثابت اضبط على 1920 × 1080 أو قم بالتوزيع العشوائي

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

هل يتم اكتشاف وضع مقطوعة الرأس دائمًا؟

ليس دائما. من خلال تكوين التخفي المناسب، لن تقوم العديد من المواقع بوضع علامة على متصفحك بدون رأس. لكن أنظمة مكافحة الروبوتات المتطورة (Cloudflare، PerimeterX) لا تزال قادرة على اكتشاف وضع مقطوعة الرأس من خلال بصمات الأصابع المتقدمة.

هل يجب علي استخدام الوضع الرأسي بدلاً من ذلك؟

يقلل الوضع الرأسي من الاكتشاف ولكنه يتطلب خادم عرض (Xvfb على Linux). يعمل نهج واجهة برمجة التطبيقات CaptchaAI بغض النظر عن وضع head/headless، مما يجعله الحل الأكثر موثوقية.

هل يمكنني تجنب اختبارات CAPTCHA بالكامل؟

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

أدلة ذات صلة

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