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-режим с помощью усовершенствованного снятия сигналы браузера.
Должен ли я использовать вместо этого режим Head?
Режим Headed снижает вероятность обнаружения, но требует наличия сервера отображения (Xvfb в Linux). Подход API CaptchaAI работает независимо от режима head/headless, что делает его более надежным решением.
Могу ли я полностью избежать CAPTCHA?
Не надежно. Даже хорошо настроенные автономные браузеры в конечном итоге запускают CAPTCHA в большом масштабе. Использование CaptchaAI в качестве уровня обработки CAPTCHA не является универсальным обещанием продолжение автоматизации даже при возникновении проблем.
Связанные руководства
- Обработка Selenium CAPTCHA с помощью Python
- Решение CAPTCHA Puppeteer с помощью Node.js
- Парсинг без блокировки