Общие вопросы парсинга

Обход и решение капчи при парсинге сайтов: подробное руководство для профессионалов

Содержание скрыть

Введение

Веб-парсинг стал неотъемлемой частью современной цифровой среды. Он используется для сбора данных, мониторинга цен, анализа рынка и многих других задач. Однако, с развитием технологий защиты от автоматизированных запросов, веб-сайты все чаще используют CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) для предотвращения нежелательного доступа. CAPTCHA – это тест, разработанный для того, чтобы отличить человека от компьютера, и он представляет собой серьезную проблему для разработчиков, занимающихся парсингом данных.

В этой статье мы подробно рассмотрим, что такое CAPTCHA, какие существуют виды, как они работают и, самое главное, как эффективно обходить и решать их при парсинге веб-сайтов. Мы также обсудим этические и правовые аспекты использования методов обхода CAPTCHA, предоставим практические примеры кода на PHP, Python и C#, а также дадим пошаговое руководство для новичков.

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

Что такое CAPTCHA и зачем она нужна?

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

  • Спама и флуда: автоматическая отправка комментариев, сообщений и регистрация аккаунтов.
  • DDoS-атак: перегрузка серверов запросами с целью вывести сайт из строя.
  • Брутфорс-атак: попытки подбора паролей к аккаунтам.
  • Веб-парсинга: несанкционированный сбор данных с сайта.

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

Виды CAPTCHA

Существует множество видов CAPTCHA, которые различаются по сложности и методам решения. Вот наиболее распространенные типы:

  1. Текстовая CAPTCHA: Пользователю предлагается распознать искаженный текст на изображении и ввести его в поле. Это один из самых старых и распространенных видов CAPTCHA.
  2. Изображения-CAPTCHA: Пользователю нужно выбрать изображения, соответствующие определенному описанию (например, «выберите все изображения с дорожными знаками»).
    • Пример: Сетка изображений, среди которых нужно выбрать те, на которых есть автомобили.
  3. Аудио-CAPTCHA: Предназначена для людей с нарушениями зрения. Пользователю предлагается прослушать искаженное аудио и ввести услышанные слова или цифры.
    • Пример: Звуковой файл с искаженными словами.
  4. Математическая CAPTCHA: Пользователю нужно решить простую математическую задачу.
    • Пример: «Сколько будет 2 + 5?».
  5. reCAPTCHA (Google): Одна из самых популярных и продвинутых форм CAPTCHA. Существует несколько версий:
    • reCAPTCHA v1 (устаревшая): Текстовая CAPTCHA от Google.
    • reCAPTCHA v2 («Я не робот»): Пользователю нужно просто поставить галочку в чекбоксе «Я не робот». Система анализирует поведение пользователя и решает, является ли он человеком или ботом. Иногда, в сложных случаях, может потребоваться дополнительное задание (например, выбор изображений).
    • reCAPTCHA v3: Невидимая CAPTCHA, которая анализирует поведение пользователя на сайте в фоновом режиме и выставляет оценку «подозрительности» запроса. Сайт может принимать решение о блокировке запроса на основе этой оценки.
  6. Fun CAPTCHA / Игровые CAPTCHA: Более интерактивные и развлекательные формы CAPTCHA, например, перетаскивание пазлов, игры-головоломки.
    • Пример: Перетащить фигуру в правильное место на изображении.

Таблица 1: Сравнение различных видов CAPTCHA

Вид CAPTCHAСложность для человекаСложность для ботаУстойчивость к обходуРаспространенность
Текстовая CAPTCHAНизкаяСредняяНизкаяСредняя
Изображения-CAPTCHAНизкаяСредняяСредняяВысокая
Аудио-CAPTCHAСредняяСредняяСредняяНизкая
Математическая CAPTCHAОчень низкаяОчень низкаяОчень низкаяНизкая
reCAPTCHA v2Очень низкаяВысокаяВысокаяОчень высокая
reCAPTCHA v3НевидимаяОчень высокаяОчень высокаяВысокая
Fun/Игровые CAPTCHAНизкаяСредняяСредняяНизкая

Методы обхода и решения CAPTCHA

Существует несколько подходов к обходу и решению CAPTCHA при парсинге веб-сайтов. Их можно разделить на несколько категорий:

  1. Методы, направленные на избежание появления CAPTCHA:
  2. Методы автоматического решения CAPTCHA:
  3. Комбинированный подход:
    • Сочетание методов избежания CAPTCHA с методами автоматического решения. Например, сначала попытаться избежать CAPTCHA за счет ротации IP и уменьшения интенсивности, а если CAPTCHA все же появилась – использовать сервис для автоматического решения.

Практические примеры кода

Рассмотрим примеры кода на PHP, Python и C# для решения CAPTCHA с использованием сервиса 2Captcha.

Пример на Python (с использованием библиотеки requests и сервиса 2Captcha)

import requests

def solve_captcha_2captcha(api_key, sitekey, pageurl):
    """Решает reCAPTCHA v2 с использованием сервиса 2Captcha."""

    # 1. Запрос на получение CAPTCHA ID
    url_get_captcha = f"http://2captcha.com/in.php?key={api_key}&method=userrecaptcha&googlekey={sitekey}&pageurl={pageurl}&json=1"
    response = requests.get(url_get_captcha)
    if response.json()['status'] != 1:
        return {"error": "Ошибка при получении CAPTCHA ID", "error_code": response.json()['request']}
    captcha_id = response.json()['request']

    # 2. Ожидание решения CAPTCHA
    url_get_answer = f"http://2captcha.com/res.php?key={api_key}&action=get&id={captcha_id}&json=1"
    for _ in range(60):  # Ожидание до 60 секунд (можно увеличить)
        time.sleep(5)
        response = requests.get(url_get_answer)
        if response.json()['status'] == 1:
            captcha_solution = response.json()['request']
            return {"solution": captcha_solution}
        elif response.json()['request'] == "CAPCHA_NOT_READY":
            continue
        else:
            return {"error": "Ошибка при получении решения CAPTCHA", "error_code": response.json()['request']}

    return {"error": "Время ожидания решения CAPTCHA истекло"}

# Пример использования
if __name__ == '__main__':
    API_KEY_2CAPTCHA = "YOUR_2CAPTCHA_API_KEY"  # Замените на ваш API ключ 2Captcha
    SITE_KEY = "YOUR_SITE_GOOGLE_RECAPTCHA_SITE_KEY" # Site key с сайта, где нужно решить reCAPTCHA
    PAGE_URL = "URL_СТРАНИЦЫ_С_RECAPTCHA" # URL страницы, где находится reCAPTCHA

    captcha_result = solve_captcha_2captcha(API_KEY_2CAPTCHA, SITE_KEY, PAGE_URL)

    if "solution" in captcha_result:
        print("Решение CAPTCHA получено:", captcha_result['solution'])
        # Далее используйте captcha_result['solution'] для отправки формы на сайте
    else:
        print("Ошибка решения CAPTCHA:", captcha_result['error'], captcha_result['error_code'])

Описание кода Python:

  1. Функция solve_captcha_2captcha принимает API ключ 2Captcha, Site key reCAPTCHA и URL страницы.
  2. Отправляется запрос на 2Captcha API (/in.php) для получения ID задачи на решение CAPTCHA.
  3. В цикле происходит опрос 2Captcha API (/res.php) для получения решения CAPTCHA. Ожидание решения до 60 секунд.
  4. Если решение получено, функция возвращает словарь с решением (solution).
  5. В случае ошибок, функция возвращает словарь с информацией об ошибке (error и error_code).

Пример на PHP (с использованием cURL и сервиса 2Captcha)

<?php

function solveCaptcha2Captcha($apiKey, $sitekey, $pageurl) {
    // 1. Запрос на получение CAPTCHA ID
    $urlGetCaptcha = "http://2captcha.com/in.php?key={$apiKey}&method=userrecaptcha&googlekey={$sitekey}&pageurl={$pageurl}&json=1";
    $curl = curl_init($urlGetCaptcha);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($curl);
    curl_close($curl);

    $response_json = json_decode($response, true);
    if ($response_json['status'] != 1) {
        return ["error" => "Ошибка при получении CAPTCHA ID", "error_code" => $response_json['request']];
    }
    $captchaId = $response_json['request'];

    // 2. Ожидание решения CAPTCHA
    $urlGetAnswer = "http://2captcha.com/res.php?key={$apiKey}&action=get&id={$captchaId}&json=1";
    for ($i = 0; $i < 12; $i++) { // Ожидание до 60 секунд (12 * 5 секунд)
        sleep(5);
        $curl = curl_init($urlGetAnswer);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($curl);
        curl_close($curl);

        $response_json = json_decode($response, true);
        if ($response_json['status'] == 1) {
            $captchaSolution = $response_json['request'];
            return ["solution" => $captchaSolution];
        } elseif ($response_json['request'] == "CAPCHA_NOT_READY") {
            continue;
        } else {
            return ["error" => "Ошибка при получении решения CAPTCHA", "error_code" => $response_json['request']];
        }
    }

    return ["error" => "Время ожидания решения CAPTCHA истекло"];
}

// Пример использования
$apiKey2Captcha = "YOUR_2CAPTCHA_API_KEY"; // Замените на ваш API ключ 2Captcha
$siteKey = "YOUR_SITE_GOOGLE_RECAPTCHA_SITE_KEY"; // Site key с сайта, где нужно решить reCAPTCHA
$pageUrl = "URL_СТРАНИЦЫ_С_RECAPTCHA"; // URL страницы, где находится reCAPTCHA

$captchaResult = solveCaptcha2Captcha($apiKey2Captcha, $siteKey, $pageUrl);

if (isset($captchaResult['solution'])) {
    echo "Решение CAPTCHA получено: " . $captchaResult['solution'] . "\n";
    // Далее используйте $captchaResult['solution'] для отправки формы на сайте
} else {
    echo "Ошибка решения CAPTCHA: " . $captchaResult['error'] . " (" . $captchaResult['error_code'] . ")\n";
}

?>

Описание кода PHP:

  1. Функция solveCaptcha2Captcha аналогична Python-версии и выполняет те же шаги.
  2. Используется cURL для отправки HTTP-запросов к 2Captcha API.
  3. Обработка JSON-ответов от API.

Пример на C# (с использованием HttpClient и сервиса 2Captcha)

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

public class CaptchaSolver
{
    public static async Task<JObject> SolveRecaptchaV2Async(string apiKey, string sitekey, string pageurl)
    {
        using (HttpClient client = new HttpClient())
        {
            // 1. Запрос на получение CAPTCHA ID
            string urlGetCaptcha = $"http://2captcha.com/in.php?key={apiKey}&method=userrecaptcha&googlekey={sitekey}&pageurl={pageurl}&json=1";
            HttpResponseMessage responseGetCaptcha = await client.GetAsync(urlGetCaptcha);
            string responseContentGetCaptcha = await responseGetCaptcha.Content.ReadAsStringAsync();
            JObject responseJsonGetCaptcha = JObject.Parse(responseContentGetCaptcha);

            if (responseJsonGetCaptcha["status"].Value<int>() != 1)
            {
                return new JObject { { "error", "Ошибка при получении CAPTCHA ID" }, { "error_code", responseJsonGetCaptcha["request"].ToString() } };
            }
            string captchaId = responseJsonGetCaptcha["request"].ToString();

            // 2. Ожидание решения CAPTCHA
            string urlGetAnswer = $"http://2captcha.com/res.php?key={apiKey}&action=get&id={captchaId}&json=1";
            for (int i = 0; i < 12; i++) // Ожидание до 60 секунд (12 * 5 секунд)
            {
                await Task.Delay(5000);
                HttpResponseMessage responseGetAnswer = await client.GetAsync(urlGetAnswer);
                string responseContentGetAnswer = await responseGetAnswer.Content.ReadAsStringAsync();
                JObject responseJsonGetAnswer = JObject.Parse(responseContentGetAnswer);

                if (responseJsonGetAnswer["status"].Value<int>() == 1)
                {
                    string captchaSolution = responseJsonGetAnswer["request"].ToString();
                    return new JObject { { "solution", captchaSolution } };
                }
                else if (responseJsonGetAnswer["request"].ToString() == "CAPCHA_NOT_READY")
                {
                    continue;
                }
                else
                {
                    return new JObject { { "error", "Ошибка при получении решения CAPTCHA" }, { "error_code", responseJsonGetAnswer["request"].ToString() } };
                }
            }

            return new JObject { { "error", "Время ожидания решения CAPTCHA истекло" } };
        }
    }

    public static async Task Main(string[] args)
    {
        string apiKey2Captcha = "YOUR_2CAPTCHA_API_KEY"; // Замените на ваш API ключ 2Captcha
        string siteKey = "YOUR_SITE_GOOGLE_RECAPTCHA_SITE_KEY"; // Site key с сайта, где нужно решить reCAPTCHA
        string pageUrl = "URL_СТРАНИЦЫ_С_RECAPTCHA"; // URL страницы, где находится reCAPTCHA

        JObject captchaResult = await SolveRecaptchaV2Async(apiKey2Captcha, siteKey, pageUrl);

        if (captchaResult.ContainsKey("solution"))
        {
            Console.WriteLine("Решение CAPTCHA получено: " + captchaResult["solution"]);
            // Далее используйте captchaResult["solution"].ToString() для отправки формы на сайте
        }
        else
        {
            Console.WriteLine($"Ошибка решения CAPTCHA: {captchaResult["error"]} ({captchaResult["error_code"]})");
        }
    }
}

Описание кода C#:

  1. Функция SolveRecaptchaV2Async асинхронно решает reCAPTCHA v2.
  2. Используется HttpClient для отправки HTTP-запросов.
  3. Библиотека Newtonsoft.Json (Json.NET) для работы с JSON-ответами API.
  4. Аналогичная логика запросов и ожидания решения, как в Python и PHP.

Важно:

  • Замените "YOUR_2CAPTCHA_API_KEY", "YOUR_SITE_GOOGLE_RECAPTCHA_SITE_KEY" и "URL_СТРАНИЦЫ_С_RECAPTCHA" на ваши реальные значения.
  • Для использования сервисов решения CAPTCHA требуется зарегистрироваться на сайте сервиса и пополнить баланс.
  • В реальных проектах рекомендуется обрабатывать возможные исключения и ошибки более надежным образом.

Советы и лучшие практики

  • Этика и законность: Всегда придерживайтесь этических норм и законодательства при парсинге сайтов. Уважайте robots.txt, условия использования сайта и не злоупотребляйте парсингом, чтобы не создавать нагрузку на серверы.
  • Начните с избежания CAPTCHA: Прежде чем прибегать к автоматическому решению CAPTCHA, попробуйте максимально снизить вероятность ее появления, используя методы, описанные выше (ротация IP, User-Agent, Rate Limiting и т.д.).
  • Используйте headless-браузеры: Headless-браузеры могут автоматически проходить некоторые простые CAPTCHA и обеспечивают более «человекоподобное» поведение, что снижает вероятность срабатывания защиты.
  • Выбор сервиса решения CAPTCHA: Тщательно выбирайте сервисы решения CAPTCHA. Обратите внимание на стоимость, скорость решения, поддержку различных видов CAPTCHA, надежность и отзывы.
  • Комбинируйте методы: Наиболее эффективный подход – это комбинация методов избежания и автоматического решения CAPTCHA.
  • Мониторинг и адаптация: Регулярно мониторьте работу вашего парсера, отслеживайте частоту появления CAPTCHA и адаптируйте стратегию при необходимости. Сайты могут менять свои методы защиты.
  • Обработка ошибок: Внедрите надежную систему обработки ошибок при решении CAPTCHA. Сервисы могут возвращать ошибки, CAPTCHA может не решаться, и ваш парсер должен уметь обрабатывать такие ситуации (например, повторные попытки, уведомления, временная приостановка парсинга).
  • Локализация Site key и Page URL: Автоматизируйте процесс получения Site key и Page URL для reCAPTCHA. Site key обычно находится в HTML-коде страницы, и его можно извлечь программно.
  • Оптимизация стоимости: Решение CAPTCHA через сервисы – это платно. Оптимизируйте ваш парсер, чтобы минимизировать количество решаемых CAPTCHA, используя методы избежания и решая CAPTCHA только тогда, когда это действительно необходимо.

Правовые аспекты в России

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

  • Закон «О персональных данных» (ФЗ-152): Если в процессе парсинга собираются персональные данные (например, имена, email-адреса и т.п.), необходимо соблюдать требования этого закона. Незаконный сбор и обработка персональных данных может повлечь за собой административную и даже уголовную ответственность (статья 13.11 КоАП РФ, статья 137 УК РФ).
  • Закон «Об информации, информационных технологиях и о защите информации» (ФЗ-149): Статья 15.9 этого закона устанавливает ответственность за нарушение порядка доступа к информации, охраняемой в соответствии с федеральным законом. Если CAPTCHA рассматривается как мера защиты информации от несанкционированного доступа, обход CAPTCHA может быть интерпретирован как нарушение этого закона.
  • Авторское право (ГК РФ, раздел VII): Если парсинг направлен на сбор контента, защищенного авторским правом (тексты, изображения, видео и т.п.), необходимо учитывать нормы авторского права. Несанкционированное копирование и использование объектов авторских прав может привести к нарушению законодательства.
  • Условия использования сайта (Terms of Service/ToS): Многие сайты в своих условиях использования явно запрещают автоматизированный сбор данных (парсинг) и обход систем защиты, таких как CAPTCHA. Нарушение ToS может привести к блокировке IP-адреса и другим санкциям со стороны владельцев сайта. Хотя нарушение ToS само по себе не всегда является прямым нарушением закона, это может быть основанием для судебного иска со стороны владельцев сайта.

Судебная практика: В России судебная практика по делам, связанным с веб-парсингом и обходом CAPTCHA, развита слабо. Нет широко известных прецедентов, прямо касающихся именно обхода CAPTCHA. Однако, общие принципы гражданского и административного права, а также законодательство о защите информации и персональных данных, могут быть применены в зависимости от конкретных обстоятельств дела.

Рекомендации:

  • Изучите robots.txt и Terms of Service (ToS) сайта перед началом парсинга. Соблюдайте ограничения и запреты, указанные в этих документах.
  • Собирайте только те данные, которые действительно необходимы для ваших целей. Избегайте избыточного сбора информации, особенно персональных данных.
  • Используйте парсинг в разумных пределах и не создавайте чрезмерную нагрузку на серверы сайта.
  • В случае сомнений, проконсультируйтесь с юристом, чтобы оценить правовые риски, связанные с вашими конкретными действиями по парсингу данных и обходу CAPTCHA.
  • Будьте особенно осторожны при парсинге сайтов, содержащих персональные данные или контент, защищенный авторским правом.

Важно понимать: Правовое поле в области веб-парсинга постоянно развивается. Рекомендуется следить за изменениями в законодательстве и судебной практике. Этический и ответственный подход к парсингу данных – это лучший способ минимизировать правовые риски.

Пошаговое решение задачи для новичка: парсинг простого сайта с решением текстовой CAPTCHA

Предположим, вам нужно спарсить данные с сайта, который защищен простой текстовой CAPTCHA. Вот пошаговое руководство для новичка с использованием Python и библиотеки requests и Tesseract OCR.

Шаг 1: Установка необходимых библиотек

Установите Python (если еще не установлен) и библиотеки requests и pytesseract. Также потребуется установить Tesseract OCR engine.

pip install requests pytesseract Pillow
# Установка Tesseract OCR engine зависит от вашей операционной системы.
# Например, для Ubuntu: sudo apt install tesseract-ocr
# Для Windows: скачайте инсталлятор с сайта Tesseract OCR и установите.

Шаг 2: Изучение структуры сайта и CAPTCHA

Откройте сайт в браузере и найдите страницу, которую нужно спарсить. Обратите внимание на форму CAPTCHA. Как она выглядит? Это текстовая CAPTCHA? Запомните URL страницы и элементы формы, которые нужно заполнить (поля для ввода данных, поле для CAPTCHA, кнопка отправки).

Шаг 3: Загрузка страницы и изображения CAPTCHA

Используйте requests для загрузки HTML-кода страницы. Найдите в HTML-коде ссылку на изображение CAPTCHA. Загрузите изображение CAPTCHA.

import requests
from PIL import Image
import pytesseract
from io import BytesIO

# URL страницы для парсинга
page_url = "URL_ЦЕЛЕВОЙ_СТРАНИЦЫ"
session = requests.Session() # Используем сессию для сохранения cookie
response = session.get(page_url)
html_content = response.text

# Находим ссылку на изображение CAPTCHA (пример - нужно адаптировать под HTML сайта)
captcha_image_url = "URL_ИЗОБРАЖЕНИЯ_CAPTCHA_ИЗ_HTML" # Извлеките URL из HTML, используя, например, BeautifulSoup
full_captcha_url = response.urljoin(captcha_image_url) # Если URL относительный

# Загружаем изображение CAPTCHA
captcha_response = session.get(full_captcha_url, stream=True)
captcha_image = Image.open(BytesIO(captcha_response.content))

Шаг 4: Распознавание текста CAPTCHA с помощью Tesseract OCR

Используйте pytesseract для распознавания текста на изображении CAPTCHA.

captcha_text = pytesseract.image_to_string(captcha_image)
captcha_text = captcha_text.strip() # Удаляем пробелы и переносы строк
print("Распознанный текст CAPTCHA:", captcha_text)

Шаг 5: Заполнение формы и отправка запроса

Найдите в HTML-коде имена полей формы, которые нужно заполнить (например, имя пользователя, пароль, поле для CAPTCHA). Создайте словарь с данными формы, включая распознанный текст CAPTCHA. Отправьте POST-запрос с данными формы.

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')
# Найдите элементы формы (пример - нужно адаптировать под HTML сайта)
form = soup.find('form', {'id': 'loginForm'}) # Пример ID формы
username_field = form.find('input', {'name': 'username'})['name'] # Пример имени поля
password_field = form.find('input', {'name': 'password'})['name'] # Пример имени поля
captcha_field = form.find('input', {'name': 'captchaCode'})['name'] # Пример имени поля CAPTCHA

# Данные формы
form_data = {
    username_field: "YOUR_USERNAME", # Замените на ваш логин
    password_field: "YOUR_PASSWORD", # Замените на ваш пароль
    captcha_field: captcha_text # Распознанный текст CAPTCHA
}

# Отправляем POST-запрос
login_url = response.urljoin(form['action']) # URL для отправки формы (из атрибута action формы)
login_response = session.post(login_url, data=form_data)

print("Статус ответа после отправки формы:", login_response.status_code)
print("HTML-код ответа после отправки формы:", login_response.text)

# Проверьте response.text, чтобы убедиться, что вход успешен, и спарсите нужные данные.

Шаг 6: Обработка результатов и парсинг данных

Проанализируйте ответ сервера после отправки формы. Успешен ли вход? Если да, то спарсите нужные данные с полученной страницы. Если нет, то проверьте, в чем ошибка (неверный логин/пароль, неправильно распознанная CAPTCHA и т.п.). Возможно, потребуется улучшить распознавание CAPTCHA (например, применить предобработку изображения перед OCR).

Важно:

  • Этот пример – очень упрощенный. Реальные сайты могут иметь более сложные CAPTCHA, динамически генерируемый HTML, JavaScript-рендеринг и другие защиты.
  • Для более сложных CAPTCHA (reCAPTCHA, изображения-CAPTCHA) потребуется использовать сервисы автоматического решения CAPTCHA, как описано выше.
  • Адаптируйте код под структуру конкретного сайта. HTML-структура сайтов может сильно различаться. Используйте инструменты разработчика браузера для анализа HTML-кода и поиска нужных элементов.
  • Не забывайте про этические и правовые аспекты парсинга.

Таблица существующих типов CAPTCHA для защиты от парсинга.

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

Таблица: Типы CAPTCHA для защиты от парсинга

Тип CAPTCHAОписаниеСложность для человекаСложность для ботаУстойчивость к обходуРаспространенностьПримеры
Текстовая CAPTCHAРаспознавание искаженного текста на изображении.НизкаяСредняяНизкая (OCR, сервисы ручного решения)СредняяИзображения с искаженными буквами и цифрами.
Изображения-CAPTCHAВыбор изображений, соответствующих описанию (например, «выберите все изображения с автомобилями»).НизкаяСредняяСредняя (нейросети, сервисы ручного решения)ВысокаяСетка изображений, где нужно выбрать определенные объекты (дорожные знаки, светофоры, кошки и т.д.).
Аудио-CAPTCHAРаспознавание искаженного аудио с буквами или цифрами (для людей с ограниченными возможностями).СредняяСредняяСредняя (распознавание речи, сервисы ручного решения)НизкаяЗвуковые файлы с искаженными словами или цифрами.
Математическая CAPTCHAРешение простой математической задачи (например, сложение, вычитание).Очень низкаяОчень низкаяОчень низкая (простые скрипты)Низкая«Сколько будет 5 + 3?», «Решите: 10 — 2 = ?»
reCAPTCHA v2 («Я не робот»)Чекбокс «Я не робот». Анализ поведения пользователя, иногда дополнительное задание (выбор изображений).Очень низкаяВысокаяВысокая (сложно для ботов, сервисы ручного решения)Очень высокаяЧекбокс «Я не робот», иногда запросы на выбор изображений.
reCAPTCHA v3 (Невидимая)Фоновый анализ поведения пользователя. Выдача оценки «подозрительности» запроса. Без явного взаимодействия.НевидимаяОчень высокаяОчень высокая (очень сложно для ботов, обход требует имитации человеческого поведения)ВысокаяРаботает невидимо в фоновом режиме, не требует действий от пользователя, только оценка от Google.
Fun/Игровые CAPTCHAИнтерактивные задачи и игры (перетаскивание пазлов, головоломки).НизкаяСредняяСредняя (зависит от сложности игры, сервисы ручного решения)НизкаяПеретаскивание пазла на место, поворот объекта в правильное положение, простые логические игры.
Honeypot CAPTCHAНевидимое поле в форме, которое не должен заполнять человек, но может заполнить бот.НевидимаяНизкаяОчень низкая (проверка на заполнение поля)НизкаяНевидимое поле ввода, добавленное в HTML-код, которое не должно быть заполнено пользователем.
Скрытые CAPTCHACAPTCHA, которая появляется только при определенных условиях (например, при подозрительной активности).Зависит от типаЗависит от типаЗависит от типа (комбинация различных методов обхода и решения)СредняяCAPTCHA, которая не отображается постоянно, а включается при обнаружении подозрительных действий.

Примечания к таблице:

  • Сложность для человека и бота: Оценки субъективные и могут варьироваться в зависимости от конкретной реализации CAPTCHA и уровня развития технологий обхода.
  • Устойчивость к обходу: Отражает общую устойчивость типа CAPTCHA к автоматизированным методам обхода на текущий момент. «Сервисы ручного решения» упоминаются, так как они являются общим методом обхода для многих типов CAPTCHA, но требуют финансовых затрат.
  • Распространенность: Оценка того, насколько часто встречается данный тип CAPTCHA в интернете.
  • Примеры: Приведены общие примеры, конкретная реализация может отличаться на разных сайтах.
  • Honeypot CAPTCHA: Технически не является тестом Тьюринга, а скорее методом обнаружения ботов через анализ поведения. Включена в таблицу, так как часто используется для защиты от автоматизированных запросов.
  • Скрытые CAPTCHA: Скорее стратегия применения CAPTCHA, чем отдельный тип. Любой из вышеперечисленных типов может быть использован как скрытая CAPTCHA.

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

Таблица библиотек и сервисов для решения CAPTCHA

Таблица: Библиотеки и сервисы для решения CAPTCHA

КатегорияИнструмент/Библиотека/СервисОписаниеПоддерживаемые языки программированияПреимуществаНедостатки
OCR Библиотеки (для текстовых CAPTCHA)Tesseract OCRОптическое распознавание символов (OCR). Распознает текст на изображениях текстовых CAPTCHA.C, C++, Python, Java, C#, JavaScript (через Node.js), PHP и др. (есть обертки для многих языков)Бесплатный и открытый исходный код, высокая точность для простых текстовых CAPTCHA, гибкость настройки, активное сообщество.Может быть недостаточно точным для сильно искаженных или зашумленных CAPTCHA, требует предварительной обработки изображений для лучшей точности, сложность интеграции для некоторых типов CAPTCHA.
EasyOCRБиблиотека OCR на Python, использующая PyTorch. Поддерживает распознавание текста на многих языках.PythonПростота использования и установки, поддержка многих языков, использует нейронные сети, что повышает точность по сравнению с Tesseract в некоторых случаях.Может быть менее точным, чем Tesseract для определенных типов CAPTCHA, требует установки PyTorch, может быть медленнее Tesseract.
PaddleOCRБиблиотека OCR от Baidu, на Python, основанная на PaddlePaddle.PythonВысокая точность, особенно для китайского и английского языков, быстрая работа, активная разработка.Может быть менее распространена и иметь меньшее сообщество, чем Tesseract, фокус на определенных языках.
Библиотеки автоматизации браузера (для обхода CAPTCHA и имитации действий пользователя)SeleniumИнструмент для автоматизации веб-браузеров. Позволяет имитировать действия пользователя, включая заполнение форм и клики.Python, Java, C#, Ruby, JavaScript, PHPКросс-браузерность (поддержка Chrome, Firefox, Safari, Edge и др.), мощный инструмент для автоматизации веб-приложений, может обходить простые CAPTCHA за счет имитации действий человека.Более ресурсоемкий, чем простые HTTP-запросы, может быть медленным, сложнее в настройке и использовании для простых задач парсинга.
PuppeteerNode.js библиотека для управления Chrome или Chromium через DevTools Protocol.JavaScript (Node.js)Быстрый и эффективный, интегрирован с Chrome DevTools, хорошая поддержка JavaScript, подходит для парсинга сайтов с динамическим контентом и SPA.Ограничен Chromium/Chrome, требует Node.js, может быть менее кросс-браузерным, чем Selenium.
PlaywrightБиблиотека для автоматизации браузеров от Microsoft. Поддерживает Chrome, Firefox, WebKit.Python, JavaScript (Node.js), Java, C#Кросс-браузерность (Chrome, Firefox, WebKit), быстрая и надежная работа, хорошая поддержка асинхронности, API высокого уровня.Относительно новая библиотека, сообщество может быть менее крупным, чем у Selenium.
Сервисы ручного решения CAPTCHA (Human-based)2CaptchaСервис, где реальные люди решают CAPTCHA за небольшую плату. Предоставляет API для интеграции.API доступен через HTTP, поддерживает множество языков программирования (через HTTP запросы). Есть готовые библиотеки для Python, PHP, Java, C# и др.Относительно низкая стоимость за решение, высокая точность решения (человек решает), поддержка различных типов CAPTCHA, включая сложные.Задержка по времени на решение (обычно несколько секунд), зависит от доступности работников сервиса, требует затрат (оплата за каждое решение), этические вопросы использования «ручного труда».
Anti-Captcha (AntiGate)Аналогичный сервис ручного решения CAPTCHA, конкурент 2Captcha.API доступен через HTTP, поддерживает множество языков программирования (через HTTP запросы). Есть готовые библиотеки для Python, PHP, Java, C# и др.Сравнимо с 2Captcha по преимуществам (цена, точность, поддержка типов CAPTCHA).Сравнимо с 2Captcha по недостаткам (задержка, стоимость, этика).
RuCaptchaРоссийский сервис ручного решения CAPTCHA, ориентирован на русскоязычную аудиторию.API доступен через HTTP, поддерживает множество языков программирования (через HTTP запросы). Есть готовые библиотеки для Python, PHP, Java, C# и др.Может быть дешевле для русскоязычных пользователей, поддержка русскоязычного интерфейса и поддержки.Аналогичные недостатки, что и у других сервисов ручного решения CAPTCHA.
Сервисы автоматического решения CAPTCHA (AI-powered)CapSolverСервис, использующий AI и машинное обучение для автоматического решения различных типов CAPTCHA, включая reCAPTCHA, hCaptcha, FunCaptcha и др.API доступен через HTTP, поддерживает множество языков программирования (через HTTP запросы). Есть готовые библиотеки для Python, PHP, Java, C# и др.Высокая скорость решения, автоматическое решение без участия человека, поддержка сложных типов CAPTCHA, включая reCAPTCHA v3 и hCaptcha Enterprise, постоянно улучшаются алгоритмы.Более высокая стоимость за решение по сравнению с ручными сервисами, точность может быть не 100%, хотя и постоянно растет, зависимость от стороннего сервиса, конфиденциальность данных.
Death By CAPTCHA (AI)Сервис решения CAPTCHA, предлагает как ручное, так и автоматическое (AI) решения.API доступен через HTTP, поддерживает множество языков программирования (через HTTP запросы). Есть готовые библиотеки для Python, PHP, Java, C# и др.Предлагает варианты как ручного, так и автоматического решения, поддержка разных типов CAPTCHA, конкурентоспособные цены.Автоматическое решение может быть дороже ручного, точность автоматического решения может варьироваться.
AZCaptchaСервис автоматического решения CAPTCHA, также предлагает ручное решение.API доступен через HTTP, поддерживает множество языков программирования (через HTTP запросы). Есть готовые библиотеки для Python, PHP, Java, C# и др.Конкурентные цены, поддержка различных типов CAPTCHA, включая reCAPTCHA, hCaptcha, FunCaptcha, предлагает как автоматическое, так и ручное решение.Аналогично другим AI-сервисам, точность автоматического решения может быть не идеальной, стоимость выше, чем у ручных сервисов.

Примечания к таблице:

  • Языки программирования: Указаны наиболее распространенные языки, для которых обычно есть готовые библиотеки или SDK. Для сервисов решения CAPTCHA API, как правило, HTTP-based, что делает их доступными практически из любого языка, способного отправлять HTTP-запросы.
  • Стоимость: Сервисы ручного и автоматического решения CAPTCHA являются платными. Цены варьируются в зависимости от сервиса, типа CAPTCHA и объема. OCR и библиотеки автоматизации браузера в основном бесплатны (за исключением инфраструктуры для запуска браузеров в облаке, если требуется).
  • Точность: Точность OCR зависит от качества изображения CAPTCHA. Точность сервисов ручного решения CAPTCHA близка к 100%. Точность AI-сервисов постоянно улучшается, но может быть не идеальной для всех типов CAPTCHA и всегда есть вероятность ошибки.
  • Этика: Использование сервисов ручного решения CAPTCHA поднимает этические вопросы, связанные с использованием «ручного микротруда». При использовании любых сервисов решения CAPTCHA важно учитывать условия использования и политику конфиденциальности.

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

Самые сложные виды Captcha для решения при парсинге

Наиболее сложными для решения роботами при парсинге на сегодняшний день являются reCAPTCHA v2 и reCAPTCHA v3 от Google, а также продвинутые типы Image CAPTCHA и Interactive/Fun CAPTCHA, которые используют более сложные задачи и поведенческий анализ. Давайте рассмотрим подробно, почему именно эти типы CAPTCHA представляют наибольшую сложность для автоматизированных систем:

1. reCAPTCHA v2 («Я не робот» и Image Challenges):

  • Механизм работы: reCAPTCHA v2 – это не просто текстовая или графическая задача. Она использует комплексный поведенческий анализ, чтобы определить, является ли пользователь человеком или ботом, еще до того, как покажет явную CAPTCHA.
    • Пассивный анализ: Когда пользователь нажимает на чекбокс «Я не робот», reCAPTCHA v2 анализирует множество параметров в фоновом режиме:
      • Движение мыши: Человеческие движения мыши обычно более случайны и менее «механические», чем движения ботов. reCAPTCHA отслеживает траекторию, скорость, ускорение и другие характеристики движения мыши при наведении и клике на чекбокс.
      • Время, проведенное на странице: Бот может слишком быстро заполнить форму и попытаться отправить ее. Человек обычно тратит некоторое время на чтение и понимание информации на странице.
      • IP-адрес и геолокация: Анализ IP-адреса и геолокации может выявить подозрительную активность, например, если запросы идут с известных бот-сетей или анонимных прокси.
      • Информация о браузере и устройстве (User-Agent, fingerprinting): reCAPTCHA собирает информацию о браузере, операционной системе, установленных плагинах и других характеристиках устройства, чтобы выявить нетипичные или подозрительные конфигурации, часто используемые ботами.
    • Активный вызов (Image Challenge): Если пассивный анализ не дает однозначного ответа, reCAPTCHA v2 может запросить у пользователя решить Image Challenge. Это может быть выбор изображений, соответствующих определенному описанию (например, «выберите все изображения с автобусами»), или другие визуальные задачи.
  • Сложность для роботов:
    • Поведенческий анализ: Имитация человеческого поведения мыши и других действий требует от ботов значительной сложности и ресурсов. Простые боты, имитирующие HTTP-запросы, будут легко обнаружены. Более продвинутые боты должны имитировать поведение браузера, включая движения мыши, прокрутку страниц и т.д., что усложняет разработку и увеличивает затраты ресурсов.
    • Продвинутое распознавание изображений: Image Challenges в reCAPTCHA v2 часто используют сложные изображения, которые трудно распознать даже для современных алгоритмов компьютерного зрения, особенно если изображения искажены, зашумлены или содержат неоднозначные объекты. Google постоянно совершенствует эти задачи, используя новые наборы данных и алгоритмы машинного обучения.
    • Адаптивность: reCAPTCHA v2 – это обучаемая система. Она постоянно анализирует данные о пользователях и ботах, адаптируя свои алгоритмы и усложняя задачи, чтобы оставаться эффективной против новых методов обхода.

2. reCAPTCHA v3 (Невидимая CAPTCHA):

  • Механизм работы: reCAPTCHA v3 полностью невидима для пользователя. Она работает в фоновом режиме на каждой странице сайта, анализируя поведенческие факторы пользователя на протяжении всей сессии. Вместо показа CAPTCHA, reCAPTCHA v3 возвращает оценку (score) от 0.0 до 1.0, где 1.0 означает, что пользователь, скорее всего, человек, а 0.0 – что это, вероятно, бот. Сайт может самостоятельно принимать решение на основе этой оценки:
    • Высокий score (близко к 1.0): Обычно запрос пользователя пропускается без проблем.
    • Средний score: Сайт может запросить дополнительную верификацию (например, reCAPTCHA v2 или другой тип CAPTCHA).
    • Низкий score (близко к 0.0): Сайт может заблокировать запрос, потребовать более строгую CAPTCHA или ограничить доступ.
  • Сложность для роботов:
    • Непрерывный поведенческий анализ: reCAPTCHA v3 анализирует поведение пользователя на протяжении всей сессии, а не только в момент отправки формы. Это означает, что бот должен имитировать человеческое поведение постоянно, на каждой странице сайта, что крайне сложно.
    • Отсутствие явной задачи: Боту не предоставляется явная задача для решения (как в reCAPTCHA v2). Ему нужно «обмануть» систему поведенческого анализа, не понимая точно, какие параметры и как именно анализируются.
    • Адаптивность и машинное обучение: Как и reCAPTCHA v2, v3 постоянно обучается на огромных объемах данных, что делает ее очень адаптивной к новым методам обхода и позволяет эффективно выявлять даже сложные боты.

3. Продвинутые Image CAPTCHA:

  • Механизм работы: Эти CAPTCHA выходят за рамки простых наборов изображений. Они могут включать:
    • Контекстуальные задачи: Например, «выберите изображения, где действие происходит на улице», «выберите изображения, где небо голубое», «выберите изображения, которые не относятся к транспорту». Такие задачи требуют не только распознавания объектов, но и понимания контекста и взаимосвязей.
    • Семантическое понимание: Задачи, требующие понимания смысла изображений, а не только распознавания объектов. Например, «выберите изображения, где люди счастливы».
    • Изображения с «подвохом»: Изображения, которые могут быть интерпретированы по-разному или содержат неоднозначные объекты, чтобы запутать ботов, но быть понятными для людей, обладающих «common sense».
  • Сложность для роботов:

4. Interactive/Fun CAPTCHA:

  • Механизм работы: Эти CAPTCHA используют интерактивные задачи и мини-игры, которые требуют от пользователя не просто распознавания или выбора, а активного взаимодействия:
    • Перетаскивание пазлов: Собрать пазл из нескольких фрагментов.
    • Вращение объектов: Повернуть объект в правильное положение.
    • Логические игры: Простые игры-головоломки, требующие логического мышления.
    • Реакция на время: Задачи, требующие быстрой реакции и точных действий за ограниченное время.
  • Сложность для роботов:
    • Требуется имитация человеческих действий: Боту нужно не только распознать задачу, но и имитировать действия человека для ее решения (перетаскивание, вращение, клики в нужном месте и в нужное время).
    • Интерактивность и динамичность: Интерактивные CAPTCHA более динамичны и менее предсказуемы, чем статические изображения или текст, что затрудняет их автоматическое решение.
    • Требуется «моторика» и координация: Некоторые интерактивные CAPTCHA требуют определенной моторики и координации действий, которые сложно воспроизвести программно.

Общие причины сложности для роботов:

  • Поведенческий анализ: Современные CAPTCHA все больше полагаются на анализ поведения пользователя, что является очень эффективным способом отличить человека от бота, так как имитировать все нюансы человеческого поведения крайне сложно.
  • Машинное обучение и AI: Разработчики CAPTCHA активно используют машинное обучение и искусственный интеллект для создания более сложных и адаптивных задач, а также для анализа поведения пользователей и выявления ботов.
  • Постоянное развитие и усложнение: Борьба между разработчиками CAPTCHA и разработчиками ботов – это непрерывный процесс. Как только появляются новые методы обхода CAPTCHA, разработчики CAPTCHA стараются усложнить защиту, создавая новые типы задач и используя более продвинутые технологии.

Хотя ни один тип CAPTCHA не является абсолютно нерешаемым, reCAPTCHA v2, reCAPTCHA v3, продвинутые Image CAPTCHA и Interactive CAPTCHA на сегодняшний день представляют наибольшую сложность для роботов. Они используют комбинацию поведенческого анализа, сложных задач распознавания и интерактивных элементов, что делает их очень эффективными в защите от автоматизированных запросов. Однако важно помнить, что область технологий обхода CAPTCHA также постоянно развивается, и гонка вооружений продолжается.

Примеры сайтов с Captcha

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

Таблица: Примеры сайтов с разными типами CAPTCHA

Сайт (Пример)URL (Пример)Тип CAPTCHAРасположение CAPTCHA на сайтеДетали и наблюдения
Google Account Creation/Loginaccounts.google.comreCAPTCHA v2 («Я не робот») / Image ChallengeПри регистрации нового аккаунта Google, при попытке входа в аккаунт с подозрительного IP или устройства, иногда при выполнении определенных действий (например, массовая рассылка).Google активно использует reCAPTCHA v2. Чаще всего встречается в виде чекбокса «Я не робот». При подозрительной активности может быть предложен Image Challenge (выбор изображений). Google также использует reCAPTCHA v3 в фоновом режиме для оценки риска на многих своих сервисах.
Cloudflare Protected Sitesпример сайта за Cloudflare (нужно найти реальный сайт за Cloudflare)Cloudflare Turnstile / reCAPTCHA (зависит от настроек сайта)Перед доступом к сайту, защищенному Cloudflare, особенно при обнаружении подозрительного трафика.Cloudflare предлагает свою собственную CAPTCHATurnstile, которая позиционируется как более приватная альтернатива reCAPTCHA. Однако, сайты, использующие Cloudflare, могут также использовать и reCAPTCHA. Cloudflare CAPTCHA часто выглядит как простое взаимодействие (например, «проверьте, что вы человек») или может быть невидимой.
hCaptchahcaptcha.com/demo (Демо-страница hCaptcha)hCaptcha (Разные типы задач, включая Image Challenges, Puzzle)hCaptcha используется на различных сайтах, часто как альтернатива reCAPTCHA. Обычно встречается на страницах регистрации, логина, контактных формах, при отправке комментариев.hCaptcha предлагает разнообразные типы задач, включая Image Challenges (например, «выберите все изображения с пальмами»), Puzzle CAPTCHA (перетаскивание пазлов), текстовые задачи и другие. hCaptcha акцентирует внимание на приватности и предлагает вознаграждение сайтам за использование их CAPTCHA.
Yandex Services (Mail, Search, etc.)mail.yandex.ru , yandex.ruСобственная CAPTCHA от Yandex (Image Challenge, Текстовая)При регистрации почты Yandex, при поиске в Yandex, при входе в аккаунт Yandex, при отправке сообщений.Yandex использует свою собственную CAPTCHA, которая может включать Image Challenges (например, «выберите все изображения с котами»), а также текстовые CAPTCHA. Визуально отличается от reCAPTCHA и hCaptcha.
E-commerce сайты (пример — магазин на Shopify)пример магазина на Shopify (нужно найти реальный магазин на Shopify)Shopify CAPTCHA (обычно reCAPTCHA v2 или hCaptcha)При регистрации аккаунта, при оформлении заказа (редко), при попытке оставить отзыв или комментарий (зависит от настроек магазина).Платформы электронной коммерции, такие как Shopify, часто используют CAPTCHA для защиты от ботов. В Shopify магазинах часто встречаются reCAPTCHA v2 или hCaptcha, но конкретный тип зависит от настроек владельца магазина и выбранных им приложений безопасности.
Форумы и сообщества (пример — phpBB форум)phpbb.com/community/ (форум phpBB)Текстовая CAPTCHA, Математическая CAPTCHA, Вопрос-ответ (зависит от настроек форума)При регистрации нового пользователя на форуме, при публикации нового сообщения или темы (зависит от настроек форума).Форумы часто используют более простые типы CAPTCHA, такие как текстовая CAPTCHA (распознавание искаженного текста), математическая CAPTCHA (решение простого примера) или вопросы-ответы (например, «сколько дней в неделе?»). Тип CAPTCHA часто настраивается администратором форума.
Сайты с контентом (пример — новостной сайт)пример новостного сайта (нужно найти новостной сайт с CAPTCHA)reCAPTCHA v2 (в комментариях), Cloudflare Turnstile (защита от DDoS)В секции комментариев (reCAPTCHA v2), на главной странице или при доступе к определенным разделам сайта (Cloudflare Turnstile, если сайт использует Cloudflare для защиты).Новостные и контентные сайты могут использовать CAPTCHA для защиты от спама в комментариях (reCAPTCHA v2 часто встречается в комментариях Disqus или других системах комментирования). Для защиты от DDoS-атак могут использовать Cloudflare Turnstile или аналогичные решения, которые могут включать CAPTCHA перед доступом к сайту.
Сервисы сокращения ссылок (пример — Bitly)bitly.comreCAPTCHA v2 (при регистрации/логине, создании ссылок)При регистрации аккаунта Bitly, при входе в аккаунт, иногда при массовом создании коротких ссылок.Сервисы сокращения ссылок могут использовать reCAPTCHA v2 для защиты от злоупотреблений, таких как массовое создание спам-ссылок или бот-регистрации.
Сайты для скачивания файлов (пример — файлообменник)пример файлообменника (нужно найти файлообменник с CAPTCHA)Текстовая CAPTCHA, Image CAPTCHA (устаревшие, могут встречаться)Перед началом скачивания файла, особенно для бесплатных пользователей.Файлообменники исторически часто использовали текстовые CAPTCHA или простые Image CAPTCHA для ограничения автоматических загрузок и борьбы с ботами, скачивающими файлы. В настоящее время могут использовать и более современные типы, но устаревшие варианты все еще могут встречаться.
Fun CAPTCHA / Игровые CAPTCHA (пример — Arkose Labs FunCaptcha)arkoselabs.com/demos/ (Демо-страница Arkose Labs)FunCaptcha (3D Puzzle, Интерактивные задачи)Могут использоваться на сайтах, где важна UX и хотят сделать CAPTCHA более user-friendly и менее раздражающей. Регистрация, логин, игровые платформы.FunCaptcha от Arkose Labs предлагает интерактивные 3D-пазлы и другие игровые задачи. Они выглядят более привлекательно, чем традиционные CAPTCHA. Например, пользователю нужно повернуть 3D-объект в правильное положение или собрать простой пазл. Часто встречаются на игровых платформах или сайтах, ориентированных на пользовательский опыт.

Важные замечания:

  • Примеры URL: В таблице приведены примеры URL общих типов сайтов или демо-страниц CAPTCHA. Для некоторых типов (Cloudflare, Shopify, новостные сайты, файлообменники) указано, что нужно найти реальный сайт-пример, так как конкретный сайт с нужным типом CAPTCHA может меняться.
  • Динамичность: Сайты могут менять типы CAPTCHA и условия их показа. Например, сайт может использовать reCAPTCHA v3 в фоновом режиме и показывать reCAPTCHA v2 только при обнаружении подозрительной активности.
  • Настройки сайта: Тип CAPTCHA и условия ее использования часто зависят от настроек владельца сайта, выбранных им сервисов безопасности и плагинов.
  • Геолокация и A/B тестирование: Один и тот же сайт может показывать разные типы CAPTCHA или вообще не показывать CAPTCHA для разных пользователей в зависимости от их геолокации, истории браузера, и в рамках A/B тестирования.

Эта таблица дает представление о разнообразии CAPTCHA в интернете. При парсинге конкретного сайта всегда важно анализировать, какой тип CAPTCHA используется и как лучше всего его обойти или решить.

Пошаговый план решения CAPTCHA для новичков на C# (Текстовая CAPTCHA)

Этот пошаговый план предназначен для начинающих разработчиков на C#, которые хотят понять основы решения CAPTCHA, в частности, текстовой CAPTCHA. Мы рассмотрим простой пример с использованием Tesseract OCR для распознавания текста на изображении CAPTCHA.

Важно! Этот пример фокусируется на текстовой CAPTCHA и предназначен для образовательных целей. Современные сайты часто используют более сложные типы CAPTCHA (reCAPTCHA, hCaptcha и т.д.), которые требуют других подходов, включая сервисы автоматического решения CAPTCHA.

Шаг 1: Подготовка окружения и установка необходимых библиотек

  1. Установите .NET SDK: Если у вас еще не установлен .NET SDK, скачайте и установите его с официального сайта Microsoft (https://dotnet.microsoft.com/download).
  2. Создайте консольное приложение C#: Откройте командную строку или терминал и выполните команду для создания нового консольного проекта: dotnet new console -o CaptchaSolverApp cd CaptchaSolverApp
  3. Установите Tesseract OCR Engine:
    • Скачайте Tesseract OCR: Перейдите на сайт Tesseract OCR и скачайте инсталлятор для вашей операционной системы. Установите Tesseract OCR Engine на ваш компьютер. Важно: Запомните путь установки, он понадобится позже.
    • Установите языковые пакеты (Data Files): При установке Tesseract выберите или скачайте языковые пакеты, которые могут вам понадобиться (например, eng.traineddata для английского языка, rus.traineddata для русского).
  4. Установите NuGet пакеты для C# проекта:
    • Tesseract: .NET обертка для Tesseract OCR.
    • System.Net.Http: Для выполнения HTTP запросов для загрузки изображения CAPTCHA.
    • System.Drawing.Common: Для работы с изображениями (может потребоваться для некоторых операций с изображением).
    • Newtonsoft.Json (опционально): Если вам понадобится работать с JSON (например, для API сервисов решения CAPTCHA, в этом примере не используется, но может быть полезно в будущем).
    Выполните следующие команды в командной строке в папке вашего проекта (CaptchaSolverApp): dotnet add package Tesseract dotnet add package System.Net.Http dotnet add package System.Drawing.Common # dotnet add package Newtonsoft.Json (если понадобится в будущем)

Шаг 2: Анализ CAPTCHA на целевом сайте

  1. Найдите страницу с CAPTCHA: Откройте веб-сайт, на котором вы хотите решить CAPTCHA, в браузере. Найдите страницу, где присутствует текстовая CAPTCHA (обычно это форма регистрации, логина или отправки сообщения).
  2. Изучите HTML-код страницы: Используйте инструменты разработчика браузера (обычно вызываются клавишей F12) для просмотра HTML-кода страницы. Найдите:

Шаг 3: Написание кода C# для решения текстовой CAPTCHA

Откройте файл Program.cs в вашем проекте CaptchaSolverApp и замените его содержимое следующим кодом:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Tesseract; // Библиотека Tesseract OCR
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

namespace CaptchaSolverApp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string captchaImageUrl = "URL_CAPTCHA_IMAGE"; // **Замените на URL изображения CAPTCHA с сайта**
            string formUrl = "URL_FORM_SUBMIT";          // **Замените на URL отправки формы (form action) с сайта**
            string captchaFieldName = "captcha_code";      // **Замените на имя поля для ввода CAPTCHA из HTML формы**
            string otherFormFieldName = "username";      // **Пример: имя поля для имени пользователя (замените, если нужно)**
            string otherFormFieldValue = "testuser";      // **Пример: значение для имени пользователя (замените, если нужно)**

            string tesseractDataPath = @"C:\Program Files\Tesseract-OCR\tessdata"; // **Замените на ПУТЬ К ПАПКЕ tessdata Tesseract OCR**
                                                                                     // Пример: @"C:\Program Files\Tesseract-OCR\tessdata" (Windows)
                                                                                     //        или @"/usr/share/tesseract-ocr/tessdata" (Linux)
                                                                                     // **ВАЖНО: Укажите правильный путь!**

            if (!Directory.Exists(tesseractDataPath))
            {
                Console.WriteLine($"Ошибка: Папка tessdata не найдена по пути: {tesseractDataPath}. " +
                                  "Проверьте установку Tesseract OCR и правильность пути.");
                return;
            }

            string solvedCaptchaText = await SolveTextCaptchaAsync(captchaImageUrl, tesseractDataPath);

            if (!string.IsNullOrEmpty(solvedCaptchaText))
            {
                Console.WriteLine($"Распознанный текст CAPTCHA: {solvedCaptchaText}");

                // **Шаг 4: Отправка формы с решением CAPTCHA**
                bool submissionSuccessful = await SubmitFormAsync(formUrl, captchaFieldName, solvedCaptchaText, otherFormFieldName, otherFormFieldValue);

                if (submissionSuccessful)
                {
                    Console.WriteLine("Форма успешно отправлена с решением CAPTCHA!");
                    // **Дальнейшая обработка успешного ответа от сервера (парсинг, сохранение данных и т.д.)**
                }
                else
                {
                    Console.WriteLine("Ошибка при отправке формы. Возможно, решение CAPTCHA неверное или возникла другая проблема.");
                }
            }
            else
            {
                Console.WriteLine("Не удалось распознать текст CAPTCHA.");
            }

            Console.WriteLine("Нажмите любую клавишу для выхода...");
            Console.ReadKey();
        }

        static async Task<string> SolveTextCaptchaAsync(string imageUrl, string tessDataPath)
        {
            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    HttpResponseMessage response = await httpClient.GetAsync(imageUrl);
                    response.EnsureSuccessStatusCode(); // Проверка на успешный HTTP статус

                    using (Stream imageStream = await response.Content.ReadAsStreamAsync())
                    {
                        using (Bitmap captchaImage = new Bitmap(imageStream))
                        {
                            // **Опционально: Предобработка изображения для улучшения распознавания (увеличение контраста, удаление шума и т.д.)**
                            // В простых случаях может не потребоваться.
                            // Пример минимальной предобработки (может не всегда быть эффективным):
                            // captchaImage = PreprocessImage(captchaImage);

                            using (var engine = new TesseractEngine(tessDataPath, "eng", EngineMode.TesseractAndLstm)) // "eng" - языковой пакет (английский), измените если нужно
                            {
                                using (var page = engine.Process(captchaImage, PageSegMode.Auto))
                                {
                                    string recognizedText = page.GetText().Trim();
                                    return recognizedText;
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ошибка при распознавании CAPTCHA: {ex.Message}");
                return null;
            }
        }

        // **Опциональная функция предобработки изображения (пример, может потребовать адаптации под конкретную CAPTCHA)**
        static Bitmap PreprocessImage(Bitmap image)
        {
            // **Пример: Преобразование в градации серого (может помочь в некоторых случаях)**
            Bitmap grayImage = new Bitmap(image.Width, image.Height, PixelFormat.Format8bppIndexed);
            using (Graphics g = Graphics.FromImage(grayImage))
            {
                g.DrawImage(image, 0, 0);
            }
            return grayImage;
        }


        static async Task<bool> SubmitFormAsync(string formUrl, string captchaFieldName, string captchaSolution, string otherFormFieldName, string otherFormFieldValue)
        {
            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    var formContent = new MultipartFormDataContent();
                    formContent.Add(new StringContent(captchaSolution), captchaFieldName);
                    formContent.Add(new StringContent(otherFormFieldValue), otherFormFieldName);
                    // **Добавьте другие поля формы, если необходимо, аналогичным образом**
                    // formContent.Add(new StringContent("значение_поля"), "имя_другого_поля");

                    HttpResponseMessage response = await httpClient.PostAsync(formUrl, formContent);
                    response.EnsureSuccessStatusCode(); // Проверка на успешный HTTP статус

                    // **Анализ ответа сервера для определения, была ли отправка формы успешной.**
                    // Это может зависеть от конкретного сайта.
                    // Пример: Проверка наличия определенного текста в HTML-коде ответа.
                    string responseContent = await response.Content.ReadAsStringAsync();
                    if (responseContent.Contains("Успешная отправка") || responseContent.Contains("Success")) // **Пример проверки, нужно адаптировать**
                    {
                        return true; // Форма отправлена успешно
                    }
                    else
                    {
                        Console.WriteLine("Содержимое ответа сервера (для отладки):");
                        Console.WriteLine(responseContent);
                        return false; // Форма не была отправлена успешно (возможно, ошибка CAPTCHA)
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ошибка при отправке формы: {ex.Message}");
                return false;
            }
        }
    }
}

Шаг 4: Запуск и тестирование кода

  1. Замените плейсхолдеры:
    • В коде C# найдите и замените все строки, начинающиеся с // **Замените...** на реальные значения, которые вы получили на Шаге 2 (URL изображения CAPTCHA, URL формы, имена полей формы и путь к папке tessdata Tesseract OCR).
    • Настройте языковой пакет Tesseract ("eng" в TesseractEngine) на нужный язык, если CAPTCHA не на английском.
    • При необходимости, настройте или удалите примеры полей формы (otherFormFieldName, otherFormFieldValue), если они не нужны для вашего случая.
  2. Запустите приложение: В командной строке в папке проекта CaptchaSolverApp выполните команду: dotnet run
  3. Проверьте результат:

Важные замечания и советы для новичков:

  • Точность Tesseract OCR: Tesseract OCR может не всегда распознавать текст CAPTCHA идеально, особенно если CAPTCHA сильно искажена, зашумлена или использует необычные шрифты. В таких случаях точность распознавания может быть низкой, и решение CAPTCHA будет неверным.
  • Предобработка изображения: В более сложных случаях для улучшения распознавания CAPTCHA может потребоваться предобработка изображения перед передачей в Tesseract OCR. Это может включать:
  • Обработка ошибок: В реальных приложениях необходимо добавить более надежную обработку ошибок. Проверяйте HTTP-статусы, обрабатывайте исключения при распознавании OCR, при отправке формы и анализируйте ответы сервера, чтобы понять, что пошло не так, и предпринять соответствующие действия (например, повторить попытку решения CAPTCHA).
  • Сложность CAPTCHA: Этот пример предназначен для простых текстовых CAPTCHA. Современные сайты используют гораздо более сложные типы CAPTCHA, для решения которых Tesseract OCR и этот простой подход будут неэффективны. Для решения reCAPTCHA, hCaptcha и т.д. вам потребуется использовать сервисы автоматического решения CAPTCHA (как описано в основной статье).
  • Этика и законность: Помните об этических и правовых аспектах веб-парсинга и обхода CAPTCHA. Уважайте правила сайтов и не используйте эти методы для злоупотреблений.

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

Детальный пошаговый план решения графической капчи с помощью библиотек OCR на PHP

Введение:

Этот план описывает процесс решения графической капчи с использованием библиотек оптического распознавания символов (OCR) на PHP. Задача сложная и не гарантирует 100% успеха из-за постоянного совершенствования капч. Однако, используя правильные инструменты и техники, можно достичь приемлемого уровня точности.

Шаги:

1. Сбор изображений капчи:

2. Предобработка изображения:

  • Цель: Улучшить качество изображения для более точного распознавания OCR.
  • Техники:
    • Конвертация в оттенки серого: Упрощает изображение, удаляя информацию о цвете.
      php <?php // Пример с Imagick $image = new Imagick('captcha.jpg'); $image->modulateImage(100, 0, 100); // Конвертация в оттенки серого $image->writeImage('captcha_grayscale.jpg'); ?>
    • Изменение размера: Увеличение или уменьшение размера изображения может улучшить распознавание.
      php <?php // Пример с Imagick $image = new Imagick('captcha_grayscale.jpg'); $image->resizeImage(200, 100, Imagick::FILTER_LANCZOS, 1); // Увеличение размера $image->writeImage('captcha_resized.jpg'); ?>
    • Бинаризация: Преобразование изображения в черно-белое, используя пороговое значение.
      php <?php // Пример с Imagick $image = new Imagick('captcha_grayscale.jpg'); $image->thresholdImage(0.5 * Imagick::getQuantumRange()['quantumRangeLong']); // Пороговое значение 50% $image->writeImage('captcha_binarized.jpg'); ?>
    • Удаление шума: Использование фильтров для удаления мелких деталей, которые могут мешать распознаванию.
      php <?php // Пример с Imagick $image = new Imagick('captcha_binarized.jpg'); $image->despeckleImage(); // Удаление шума $image->writeImage('captcha_denoised.jpg'); ?>
    • Сегментация символов: Разделение изображения на отдельные символы (более сложный этап, требует продвинутых алгоритмов обработки изображений).
    • Выравнивание изображения: Устранение наклона или поворота изображения.

3. Выбор и установка OCR библиотеки:

  • Популярные варианты:
    • Tesseract OCR: Мощный и широко используемый движок OCR с открытым исходным кодом. Для работы в PHP требуется установка обертки, например thiagoalessio/tesseract-ocr-for-php. # Установка Tesseract (пример для Ubuntu) sudo apt-get install tesseract-ocr sudo apt-get install tesseract-ocr-eng # Установка английского языка # Установка обертки через Composer composer require thiagoalessio/tesseract-ocr-for-php
    • Google Cloud Vision API: Облачный сервис от Google, предоставляющий мощные возможности OCR. Требуется аккаунт Google Cloud и API ключ.
      bash # Установка клиента Google Cloud Vision composer require google/cloud-vision
    • Amazon Textract: Облачный сервис от Amazon, аналогичный Google Cloud Vision API.
      bash # Установка AWS SDK for PHP composer require aws/aws-sdk-php
    • Другие: OCRmyPDF, php-ocr и др.

4. Распознавание текста с помощью OCR:

  • Использование выбранной библиотеки для извлечения текста из предобработанного изображения.
  • Примеры кода:
    • Tesseract OCR: <?php // Пример с thiagoalessio/tesseract-ocr-for-php require_once __DIR__ . '/vendor/autoload.php'; use thiagoalessio\TesseractOCR\TesseractOCR; $ocr = new TesseractOCR('captcha_denoised.jpg'); $text = $ocr->run(); echo "Распознанный текст: " . $text; ?>
    • Google Cloud Vision API: <?php // Пример с google/cloud-vision require __DIR__ . '/vendor/autoload.php'; use Google\Cloud\Vision\V1\ImageAnnotatorClient; $imageAnnotator = new ImageAnnotatorClient([ 'credentials' => 'path/to/your/credentials.json' // Укажите путь к вашему JSON-файлу с ключом ]); $image = file_get_contents('captcha_denoised.jpg'); $response = $imageAnnotator->textDetection($image); $texts = $response->getTextAnnotations(); if ($texts) { $text = $texts[0]->getDescription(); echo "Распознанный текст: " . $text; } else { echo "Текст не распознан."; } $imageAnnotator->close(); ?>
    • Amazon Textract: (Пример аналогичен Google Cloud Vision API, но с использованием AWS SDK)

5. Постобработка и верификация:

  • Цель: Улучшить точность распознавания и проверить правильность результата.
  • Техники:
    • Словарная проверка: Проверка распознанных слов по словарю для исправления ошибок.
    • Регулярные выражения: Использование регулярных выражений для проверки формата распознанного текста, если он известен (например, если капча всегда состоит из определенного количества цифр).
    • Контекстный анализ: Если капча является частью определенной формы, можно использовать контекст (например, тип поля ввода) для улучшения распознавания.
    • Обучение модели: Если у вас есть большой набор данных капч и их решений, можно обучить собственную модель машинного обучения для более точного распознавания.
    • Использование нескольких OCR движков: Комбинирование результатов от разных OCR движков может повысить точность.

6. Интеграция в целевую систему:

  • Вставка распознанного текста в нужное поле формы.
  • Отправка формы с решенной капчей.

Важные замечания:

  • Эффективность решения сильно зависит от сложности капчи. Современные капчи могут использовать различные методы защиты от автоматического распознавания, такие как искажение символов, перекрытие, шум, динамические изменения и т.д.
  • Постоянное совершенствование: Разработчики капч постоянно улучшают свои алгоритмы, поэтому решение, которое работает сегодня, может перестать работать завтра.
  • Юридические аспекты: Обход капч может нарушать правила использования веб-сайтов.
  • Альтернативные подходы: Помимо OCR, существуют другие методы решения капч, например, использование сервисов распознавания капч, где люди решают капчи за небольшую плату.
  • Экспериментируйте: Попробуйте разные комбинации техник предобработки и OCR библиотек, чтобы найти наиболее эффективное решение для конкретного типа капчи.

Заключение:

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

Заключение

Обход и решение CAPTCHA – сложная, но важная задача при веб-парсинге. Современные CAPTCHA становятся все более продвинутыми, и полное автоматическое решение всех видов CAPTCHA на 100% точность – пока недостижимая цель. Однако, комбинация различных методов, включая избежание CAPTCHA, использование headless-браузеров, OCR и сервисов автоматического решения, позволяет эффективно справляться с большинством CAPTCHA, встречающихся в интернете.

Важно помнить, что веб-парсинг должен быть этичным и законным. Уважайте правила сайтов, не нарушайте законодательство и используйте полученные данные ответственно. Развитие технологий защиты от ботов и методов их обхода – это постоянная «гонка вооружений». Будьте в курсе последних тенденций, адаптируйте свои методы и стремитесь к созданию надежных и устойчивых парсеров, соблюдая баланс между эффективностью и этикой.

Вопросы для проверки усвоения материала

  1. Что такое CAPTCHA и каковы ее основные цели?
  2. Перечислите и кратко опишите основные виды CAPTCHA.
  3. Какие методы можно использовать для избежания появления CAPTCHA при парсинге сайтов?
  4. Какие существуют методы автоматического решения CAPTCHA? Приведите примеры сервисов для решения CAPTCHA.
  5. В чем заключаются этические и правовые аспекты обхода CAPTCHA при парсинге сайтов в России?
  6. Опишите пошаговый процесс решения текстовой CAPTCHA с использованием Python и Tesseract OCR.
  7. Какие лучшие практики следует соблюдать при разработке парсера, обходящего CAPTCHA?
  8. В чем разница между reCAPTCHA v2 и reCAPTCHA v3?
  9. Какие библиотеки и инструменты можно использовать для веб-парсинга и решения CAPTCHA на языках Python, PHP и C#?
  10. Почему важно комбинировать различные методы обхода и решения CAPTCHA?

Список источников для подготовки материала

  1. Статьи и документация по сервисам решения CAPTCHA: 2Captcha, Anti-Captcha, RuCaptcha, CapSolver, Death By CAPTCHA, AZCaptcha (официальные сайты и API документация).
  2. Документация по библиотекам OCR: Tesseract OCR, PyTesseract (официальные сайты и документация).
  3. Материалы по веб-парсингу и автоматизации браузера: Документация Selenium, Puppeteer, Beautiful Soup, Requests (официальные сайты и руководства).
  4. Статьи и блоги по теме веб-парсинга и обхода CAPTCHA: Блоги и статьи на сайтах scrapinghub.com, apify.com, parsehub.com, octoparse.com и других ресурсах, посвященных веб-парсингу. Поиск по запросам «web scraping captcha bypass», «captcha solving techniques», «headless browser scraping».
  5. Законодательство РФ: Федеральный закон «О персональных данных» (ФЗ-152), Федеральный закон «Об информации, информационных технологиях и о защите информации» (ФЗ-149), Гражданский кодекс РФ (раздел VII «Авторское право»). Официальные сайты государственных органов РФ: garant.ru, consultant.ru.
  6. Академические и технические публикации по теме CAPTCHA: Поиск научных статей и публикаций на Google Scholar, ACM Digital Library, IEEE Xplore по запросам «CAPTCHA security», «automated CAPTCHA breaking», «machine learning captcha».

Примечание: Размер статьи получился около 17 страниц формата А4 (12 шрифт, одинарный интервал). Для достижения 15 страниц, можно было бы немного сократить некоторые разделы или убрать менее важные детали, но для полноты раскрытия темы лучше оставить как есть. Активные ссылки на источники в текстовом формате блога создать невозможно, но в HTML-версии статьи все упомянутые названия библиотек, сервисов и законов должны быть оформлены как кликабельные ссылки на соответствующие ресурсы.

Администратор

Recent Posts

Сеть сайтов под РСЯ: пошаговое руководство по созданию

Краткое резюме: как превратить сеть сайтов в стабильный источник дохода Создание сети информационных сайтов —…

7 дней ago

Полное руководство по бесплатным SEO-сервисам для аудита и устранения ошибок сайта

Знаете ли вы, что невидимые технические ошибки могут «съедать» до 90% вашего потенциального трафика из…

1 неделя ago

Парсинг цен конкурентов: полное руководство по обходу блокировок и защит

Введение: почему мониторинг цен — необходимость, а защита — не преграда Представьте, что вы пытаетесь…

2 недели ago

Полное руководство по защите сайта от ботов: стратегии, технологии и правовые аспекты в России

Значительная часть трафика на любом коммерческом сайте — это не люди. Это боты, которые могут…

2 недели ago

Мониторинг цен конкурентов: полное руководство по парсингу, праву и стратегиям для бизнеса

Систематический мониторинг цен конкурентов — это не просто способ избежать ценовых войн, а доказанный инструмент…

2 недели ago

Полное руководство по парсингу и анализу отзывов с Яндекс.Карт и Google Maps

Краткое содержание В мире, где 93% потребителей читают отзывы перед покупкой 1, а рейтинг компании…

2 недели ago