×

Обход капчи: методы распознавания, подходящие для SEO, и примеры кода для автоматического решения

Россия +7 (909) 261-97-71
Шрифт:
0 363
Подпишитесь на нас в Telegram

Каждый SEO-специалист хотя бы раз сталкивался с капчей, но мог даже не задумываться о том, что это и зачем она нужна.

В статье Александр Герасимчук и команда Топвизор-Журнала разобрали, что это такое, какие виды капчи бывают и самое главное – какими способами ее можно обойти в SEO.

Капча и ее значение в контексте SEO

Слово «капча» восходит к английскому captcha, что расшифровывается как Completely Automated Public Turing test to tell Computers and Humans Apart, а дословно переводится как «полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей».

Этот тест создавался для защиты веб-сайтов от массовых атак, спама, парсинга информации и так далее, то есть для того, чтобы усложнить доступ к необходимым данным для конкурентов, автоматизаторов, SEO-специалистов, маркетологов. Однако сегодня существует масса способов, которые позволяют обойти капчу.

Капча

Зачем капчу продолжают использовать

Для начала предлагаю рассмотреть вопрос с точки зрения владельцев ресурсов, которые используют капчу. Действительно, если существует много методов для обхода капчи, зачем ставить на сайте то, что заведомо не может защитить ресурс?

Капча

Уровень защиты сайта с помощью капчи

На самом деле ситуация не так однозначна, как может показаться. Защитить сайт от парсинга данных может быть сложно, особенно если это не коммерческий проект, а какой-нибудь сайт-хомячок. Другое дело крупный портал, который приносит многомиллионную прибыль, – согласитесь, есть повод задуматься о полноценной защите.

Например, Amazon – эти ребята знают толк в способах защиты сайта. Помимо того, что на сайте есть три вида капчи, каждая из которых появляется в разных случаях, владельцы еще и рандомно меняют дизайн, чтобы автоматизаторы и парсеры не могли выполнять свои действия старыми методами. Меняется дизайн, поэтому меняется и скрипт – такой вот круговорот.

Если с Amazon понятно, они защищают свою инфраструктуру, что с более мелкими веб-мастерами? Они тоже понимают, что ставить на сайт труднопроходимую капчу не очень хорошая идея, поскольку этим они создают дополнительные сложности для реальных посетителей. Чем сложнее капча, тем больше шансов, что пользователь просто уйдет к конкуренту по поисковой выдаче.

Поэтому владельцы сайтов стараются не жестить с капчей и соблюдать баланс. Оставлять сайт совсем без защиты странно, так как туда начнут ломиться уж очень простые боты, которые не умеют обходить капчу, но могут совершать массовые действия. Сегодня владельцы сайтов выбирают универсальные решения, например reCAPTCHA или hCaptcha: и сайт под защитой, и пользователи не сильно напрягаются.

Более сложные капчи используют, когда на сайте появляется поток ботов, но это уже тема отдельной статьи.

Зачем нужен обход капчи

Есть несколько ситуаций, когда SEO-специалист сталкивается с капчей:

  • работа с поисковыми системами – например, съем позиций, парсинг ключевых слов;

  • работа с сайтами конкурентов – например, анализ ресурса, парсинг контента;

  • автоматизация рутинных задач.

В остальных случаях обход капчи выполняет сервис, которым он пользуется. Все, что требуется от специалиста, – это подставить ключ API от сервиса распознавания капчи в нужное поле или решить ее вручную.

В 95% случаях SEO-специалист обходит капчу при работе с поисковыми системами Яндекс, Google и, может, Bing или Rambler.

Основные методы обхода капчи

Теперь перейдем к более прикладной стороне вопроса: разберем методы обхода капчи, которые можно использовать SEO-специалисту, их возможные преимущества и недостатки.

В данном разделе мы будем говорить только о методах, которые требуют более глубокого погружения специалиста в тему, чем просто использование ключа API на главной странице сервиса. Уверен, разобраться в этом вопросе можно.

Через автоматизированные сервисы

Самый простой способ обхода любой капчи при парсинге поисковой системы – использование ресурсов стороннего сервиса. Таких сервисов на рынке огромное количество, наиболее популярные из них – 2Captcha, ruCaptcha, SolveCaptcha.

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

Если детально разбираться в документации сервисов, можно обнаружить, что есть возможность платить только за решенные капчи, а за те, которые не решены, не платить. Это работает, если правильно настроить все передаваемые параметры.

Легко сказать – передать капчу, а как это сделать? Даже для новичка в работе с кодом это не самый сложный вопрос.

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

Задачи специалиста:

  • определиться с видом капчи;

  • изучить документацию сервиса;

  • определить обязательные параметры, которые нужно отправить в сервис распознавания капчи;

  • написать код и вставить его в структуру своего скрипта или программы.

Пример кода для решения reCaptcha V2 на Python:

import requests
import time

API_KEY = 'ВАШ_КЛЮЧ_2CAPTCHA'  # Ваш API-ключ 2Captcha
SITE_KEY = 'ВАШ_SITE_KEY'  # Ваш site key для reCaptcha
PAGE_URL = 'https://example.com'  # URL страницы с капчей

def get_captcha_solution():
    # Этап 1: Отправка капчи на решение
    captcha_id_response = requests.post("http://2captcha.com/in.php", data={
        'key': API_KEY,
        'method': 'userrecaptcha',
        'googlekey': SITE_KEY,
        'pageurl': PAGE_URL,
        'json': 1
    }).json()

    if captcha_id_response['status'] != 1:
        print(f"Ошибка отправки капчи: {captcha_id_response['request']}")
        if captcha_id_response['request'] == "ERROR_NO_SLOT_AVAILABLE":
            # Подождем и попробуем снова
            print("Слотов нет, ждем 10 секунд и пробуем снова.")
            time.sleep(10)
            return get_captcha_solution()
        return None

    captcha_id = captcha_id_response['request']
    print(f"Капча отправлена на решение. ID: {captcha_id}")
   
    # Этап 2: Ожидание решения капчи
    for attempt in range(30):  # 30 попыток с интервалом в 5 секунд
        time.sleep(5)
        result = requests.get("http://2captcha.com/res.php", params={
            'key': API_KEY,
            'action': 'get',
            'id': captcha_id,
            'json': 1
        }).json()

        if result['status'] == 1:
            print(f"Капча решена: {result['request']}")
            return result['request']
        elif result['request'] == 'CAPCHA_NOT_READY':
            print(f"Капча ещё не решена, ждем... ({attempt + 1}/30)")
        else:
            print(f"Ошибка решения капчи: {result['request']}")
            return None
    return None

captcha_solution = get_captcha_solution()

if captcha_solution:
    # Используйте решённую капчу для отправки формы
    print('Используйте ответ капчи:', captcha_solution)
else:
    print('Не удалось решить капчу.')

В данном примере необходимо найти на странице один параметр – в коде он называется site_key, а на странице с капчей, как правило, указан sitekey. Этот параметр вместе с URL капчи и ключом API от сервиса 2Сaptcha нужно отправить на сервер, а когда получите токен с решением, необходимо подставить его в капчу. После этого можно продолжать работу с сайтом.

В любой капче, которая решается токеном, код будет примерно таким же – отличие лишь в наборе передаваемых параметров, а в некоторых (типа капчи Amazon) добавляется еще и максимальное время решения.

Достоинства: простота настройки, скорость распознавания капчи.

Недостатки: метод платный, так как используется сторонний сервис.

С использованием прокси и ротации IP-адресов

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

Используя ротацию прокси, мы каждый раз обращаемся к источнику парсинга с новым прокси – как новая личность, поэтому источник не считает наши действия подозрительными (какое-то время).

Для реализации метода потребуется пул IP-адресов, что может быть не дешевле, а иногда даже дороже, чем метод с обходом капчи через сторонний сервис.

Можно использовать резидентные прокси от 2Captcha с ротацией – тогда не нужен пул IP-адресов, достаточно будет правильно настроить ротации. Иногда можно использовать мобильные прокси – они будут дороже резидентных, но и качество будет кратно выше. В общем, на любой бюджет и требования есть свое решение.

Вот пример кода, который не будет работать автономно: потребуется встроить его в скрипт:

import requests
from itertools import cycle
import time
import urllib.parse

# Список прокси с индивидуальными логинами и паролями
proxies_list = [
    {"proxy": "2captcha_proxy_1:port", "username": "user1", "password": "pass1"},
    {"proxy": "2captcha_proxy_2:port", "username": "user2", "password": "pass2"},
    {"proxy": "2captcha_proxy_3:port", "username": "user3", "password": "pass3"},
    {"proxy": "2captcha_proxy_4:port", "username": "user4", "password": "pass4"},
    # Добавьте остальные прокси по аналогии
]

# Цикл прокси для ротации
proxy_pool = cycle(proxies_list)

# Целевой URL, с которым работаем
url = "https://example.com"  # Замените на нужный сайт

# Заголовки для имитации реального пользователя
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.0"
}

# Отправляем несколько запросов с ротацией прокси
for i in range(5):  # Укажите нужное количество запросов
    proxy_info = next(proxy_pool)  # Выбираем следующий прокси
    proxy = proxy_info["proxy"]
    username = urllib.parse.quote(proxy_info["username"])
    password = urllib.parse.quote(proxy_info["password"])

    # Формируем прокси с авторизацией
    proxy_with_auth = f"http://{username}:{password}@{proxy}"

    try:
        response = requests.get(
            url,
            headers=headers,
            proxies={"http": proxy_with_auth, "https": proxy_with_auth},
            timeout=10
        )
       
        # Проверка статуса ответа
        if response.status_code == 200:
            print(f"Запрос {i + 1} через прокси {proxy} успешен. Статус: {response.status_code}")
        else:
            print(f"Запрос {i + 1} через прокси {proxy} завершился с кодом {response.status_code}")
   
    except requests.exceptions.RequestException as e:
        print(f"Ошибка на прокси {proxy}: {e}")
   
    # Задержка между запросами для естественного поведения
    time.sleep(2# Настройте задержку в зависимости от требований

В коде приведены примеры для использования резидентных прокси 2Сaptcha.

Хороший пример – сервис LinkedIn: у них настроена система таким образом, что три раза с одного IP-адреса можно авторизоваться без ввода капчи, а на третий раз появляется капча. Зная эту особенность, нужно настроить ротацию прокси и радоваться, что взломали систему… Пока не пофиксят, конечно.

Преимущества: решение не требует интеграции сторонних сервисов, если у вас есть собственный пул IP-адресов.

Недостатки: это нестабильное решение по сравнению с первым способом, а при использовании качественных прокси может быть дороже, чем обход капчи.

С помощью эмуляторов браузера

Конечно, использование одной лишь ротации прокси без дополнительных усилий будет недостаточным для обхода капчи в современных условиях, поэтому третий метод плавно вытекает из второго и связывает их, что увеличивает продолжительность жизни.

Использование headless-браузеров не какая-то модная фишка: применяют их уже давно, и они помогают имитировать действия пользователей, маскируя ботов под реальных людей. То есть SEO-специалист до последнего делает вид, что он живой человек и что он поглощает информацию на странице, попутно решая свои задачи, а когда его обнаруживают, меняет прокси и начинает все заново.

Таким нехитрым способом при наличии достаточного пула IP-адресов получается парсить крупные проекты.

Но еще одна интересная особенность заключается в том, что теперь нужно не просто имитировать поведение живого человека, но и скрывать от ресурса, что ты используешь headless-браузер. Какие-то игры шпионов получаются, а не решение SEO-задач продвинутым способом.

Пример стандартного кода для работы с headless-браузером:

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

// Подключаем stealth-плагин для сокрытия headless-режима
puppeteer.use(StealthPlugin());

(async () => {
    const browser = await puppeteer.launch({
        headless: false,  // Чтобы увидеть процесс (можно отключить для реальной работы)
        args: [
            '--no-sandbox',
            '--disable-setuid-sandbox',
            '--window-size=1920,1080'
        ]
    });
   
    const page = await browser.newPage();
   
    // Устанавливаем заголовки, чтобы выглядеть как настоящий пользователь
    await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.0");
    await page.setViewport({ width: 1280, height: 800 });

    // Ждем 2 секунды для имитации реального поведения
    await page.waitForTimeout(2000);
   
    // Прокручиваем страницу, чтобы избежать триггеров капчи
    await page.evaluate(() => {
        window.scrollBy(0, window.innerHeight);
    });

    // Ждем перед выполнением действий, чтобы капча не появилась
    await page.waitForTimeout(2000);

    // Выполняем действия, такие как ввод текста или клики
    await page.type('#search', 'Some search query', { delay: 100 });  // Медленная печать текста
    await page.click('#submit');  // Клик по кнопке

    // Завершение сессии
    await browser.close();
})();

Несколько комментариев относительно кода:

Stealth-плагин: puppeteer-extra-plugin-stealth помогает скрыть признаки headless-режима, такие как navigator.webdriver, которые сайты используют для обнаружения автоматизированных скриптов.

Настройки User-Agent и заголовков: установка User-Agent и размеров окна браузера (viewport) делает браузер похожим на стандартный.

Задержки между действиями: использование задержек (waitForTimeout, type и delay) помогает избежать быстрых действий, которые могут показаться автоматическими.

Скроллинг страницы: прокрутка (window.scrollBy) создает иллюзию взаимодействия с контентом.

Изменение прокси: для ротации IP можно запускать Puppeteer через различные прокси, чтобы каждый новый сеанс начинался с другого адреса – это снижает вероятность появления капчи.

Преимущества: дешевле по сравнению с предыдущими методами.

Недостатки: headless-браузеры могут быть неэффективны при парсинге хорошо защищенных сайтов (к таким относятся поисковые системы).

Эмуляторы браузеров применяются в самых сложных случаях, когда простым запросом получить информацию не удается никак. А в качестве побочного эффекта они позволяют решить капчу с помощью кликов, как реальный пользователь.

Более сложные методы, включающие машинное обучение

Чтобы минимизировать траты на распознавание капчи, можно воспользоваться машинным обучением – это ручная тренировка системы по распознаванию капчи. Можно использовать готовые решения, например Tesseract – проще говоря, примерно тот же механизм, но уже натренированный.

В обоих случаях такая система не сможет решить сложную капчу, этот способ подойдет только для распознавания текстовой капчи или классификации (разметке) изображений или чеков.

Где в SEO может понадобиться классификация изображений, я не знаю (придумайте что-нибудь сами), но это вполне рабочий вариант для легких капч. Это бесплатно и это эффективно.

Пример кода подобрать сложно, поскольку это достаточно нишевая тема и универсального кода для разных вариантов нет.

Преимущества: бесплатно и эффективно.

Недостатки: не подходит для сложных капч.

Какой метод выбрать

Если есть немного времени и желание покопаться в коде, первый и второй способы в комплексе с третьим – ваш вариант. Если хочется все максимально упростить, ищите сервисы, которые предоставляют инструменты для работы. Но рекомендовать что-то конкретное не буду, так как это тема отдельной статьи.

Безкапчевого вам доступа!

Оригинал статьи на SEOnews

Есть о чем рассказать? Тогда присылайте свои материалы в редакцию.


Новые 
Новые
Лучшие
Старые
Сообщество
Подписаться 
Подписаться на дискуссию:
E-mail:
ОК
Вы подписаны на комментарии
Ошибка. Пожалуйста, попробуйте ещё раз.
Отправить отзыв
ПОПУЛЯРНЫЕ ОБСУЖДЕНИЯ НА SEONEWS
Что такое AIO (AI Optimization) или GEO-оптимизация, как быть на шаг впереди конкурентов
Эдуард
1
комментарий
0
читателей
Полный профиль
Эдуард - Годно) многие моменты я не знал.
Фиды, фильтры, внутренний поиск: как выжать максимум при технических ограничениях и увеличить трафик более чем в 5 раз
i-Media интернет-агентство
2
комментария
0
читателей
Полный профиль
i-Media интернет-агентство - Google Merchant работает, товары показываются - в кейсе есть скриншот с примером.
Целевая аудитория: как найти и встроиться в ее вселенную
Александра
2
комментария
0
читателей
Полный профиль
Александра - Здравствуйте! Благодарю Вас за отличную статью! Много полезной информации, написано доступным языком.
AI SEO в 2025: 5 шагов к видимости бренда в поиске нового поколения
Пиксель Плюс
1
комментарий
0
читателей
Полный профиль
Пиксель Плюс - Сергей, здравствуйте! Мы починили ссылку. Спасибо, что обратили внимание!
В Почте и Облаке Mail появился новый тариф – «Семейный»
Анна Макарова
393
комментария
0
читателей
Полный профиль
Анна Макарова - Да, конечно, владелец видит все файлы. А про других пользователей так написано: подключившие этот тариф, могут добавлять в подписку до 4 пользователей. Всем, кого пригласили в подписку, предоставляется доступ к терабайту облачного пространства для общих дел.
Как управлять репутацией фармацевтических препаратов в 2025 году
Сергей Медведев
2
комментария
0
читателей
Полный профиль
Сергей Медведев - Отличное исследование, ждем исследования на тематику банки и детского питания.
Накрутка ПФ: выбираем лучший сервис для накрутки поведенческих факторов
juristsyt
1
комментарий
0
читателей
Полный профиль
juristsyt -
AI и голосовой поиск: как меняется SEO
Александр Кузнецов
1
комментарий
0
читателей
Полный профиль
Александр Кузнецов - Статья хорошая, но запрет на использование гугл аналитики может всё это затормозить очень сильно.
Клиентам Сбера, предпочитающим Apple, вновь станет доступна бесконтактная оплата смартфоном
Борис Евгеньевич Романовский
1
комментарий
0
читателей
Полный профиль
Борис Евгеньевич Романовский - "Воспользоваться ей можно, даже если на смартфоне нет доступа к интернету." Попробовал , без интернета не войти в приложение "сбера"...
Высокая позиция в Яндексе: гарантированный билет в нейроответы или миф?
Старый сеошник
7
комментариев
0
читателей
Полный профиль
Старый сеошник - Так наивно повелся на заголовок и обещание исследования на 5 млн запросах. А попал на частные мнения трех сеошников с общими формулировками и аргументами, которые гуляют по интернету уже полгода почти)
ТОП КОММЕНТАТОРОВ
Комментариев
910
Комментариев
834
Комментариев
554
Комментариев
540
Комментариев
483
Комментариев
393
Комментариев
373
Комментариев
262
Комментариев
249
Комментариев
171
Комментариев
156
Комментариев
141
Комментариев
124
Комментариев
121
Комментариев
100
Комментариев
97
Комментариев
97
Комментариев
96
Комментариев
80
Комментариев
77
Комментариев
74
Комментариев
67
Комментариев
66
Комментариев
60
Комментариев
59

Отправьте отзыв!
Отправьте отзыв!