تقوم المتصفحات بدون رأس بتشغيل اختبارات 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)، فإن تقليل عدد مرات ظهورها يوفر الوقت والتكلفة.
تصحيح navigator.webdriver
# 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 يضمن استمرار التشغيل الآلي عند ظهور التحديات.