Сценарии использования

Проблемы и решения капчи headless браузера

headless браузеры запускают CAPTCHA чаще, чем обычные браузеры. Сайты обнаруживают headless Chrome, Firefox и WebKit с помощью сигналы браузера JavaScript и создают проблемы для блокировки автоматизации. Вот как решить каждую проблему.

Почему headless браузеры получают больше CAPTCHA

Метод обнаружения Какие сайты проверять
сигнал WebDriver Установите true в headless-режиме.
Размеры окна Без головы часто используется разрешение 800x600 по умолчанию.
WebGL-рендерер headless-режим возвращает «SwiftShader»
Протокол инструментов разработчика Chrome CDP-порт открыт
Отсутствующие плагины Нет программы просмотра PDF, Flash и т. д.
API разрешений Различные ответы в headless
Строка пользовательского агента Подстрока «HeadlessChrome»

Когда эти сигналы объединяются, системы защиты от ботов (reCAPTCHA, Cloudflare, DataDome) присваивают более низкие оценки доверия и показывают CAPTCHA.

Решение 1. Решите CAPTCHA через API

Вместо того, чтобы полностью избегать CAPTCHA, решайте их по мере их появления. CaptchaAI работает с любым автономным браузером, поскольку он решает CAPTCHA на стороне сервера.

Селен (Питон)

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://https://staging.example.com/qa-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://https://staging.example.com/qa-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, уменьшение частоты их появления экономит время и деньги.

Патч сигнал 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-стандартная конфигурация браузера
const puppeteer = require("puppeteer-extra");
const StealthPlugin = require("puppeteer-extra-plugin-стандартная конфигурация браузера");
puppeteer.use(StealthPlugin());
# Selenium
pip install undetected-chromedriver
import undetected_chromedriver as uc
driver = uc.Chrome(headless=True)

Решение 3. Обработка страница Cloudflare-защиты в staging

Страницы соревнований Cloudflare требуют больше, чем просто токен — вам нужен файл cookie qa_validation_cookie:

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

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

Распространенные проблемы в разных браузерах

Браузер Проблема Исправить
headless-режим хром сигнал WebDriver = true Используйте флаг --disable-blink-features.
Puppeteer Отсутствуют плагины для браузера Используйте puppeteer-extra-plugin-стандартная конфигурация браузера
Селен Переключатель enable-automation excludeSwitches: ["enable-automation"]
Драматург Сигналы WebKit Используйте канал Chromium со скрытыми патчами
Все Постоянный размер области просмотра Установите разрешение 1920x1080 или рандомизируйте.

Часто задаваемые вопросы

Всегда ли обнаруживается headless-режим?

Не всегда. При правильной настройке предсказуемая конфигурация браузера многие сайты не будут отмечать ваш автономный браузер. Но сложные системы защиты от ботов (Cloudflare, PerimeterX) по-прежнему могут обнаруживать headless-режим с помощью усовершенствованного снятия сигналы браузера.

Режим Headed снижает вероятность обнаружения, но требует наличия сервера отображения (Xvfb в Linux). Подход API CaptchaAI работает независимо от режима head/headless, что делает его более надежным решением.

Могу ли я полностью избежать CAPTCHA?

Не надежно. Даже хорошо настроенные автономные браузеры в конечном итоге запускают CAPTCHA в большом масштабе. Использование CaptchaAI в качестве уровня обработки CAPTCHA не является универсальным обещанием продолжение автоматизации даже при возникновении проблем.

Связанные руководства

Комментарии для этой статьи отключены.