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

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

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

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

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

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

Для чего капчу продолжают применять

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

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

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

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

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

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

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

Для чего нужен обход капчи

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

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

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

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

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

В 95% вариантах SEO-специалист обходит капчу при работе с поисковыми машинами Yandex, Гугл и, может, 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-адресов

2-ой вариант обойти капчу для решения 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: у их настроена система таковым образом, что трижды с 1-го IP-адреса можно авторизоваться без ввода капчи, а на 3-ий раз возникает капча. Зная эту изюминка, необходимо настроить ротацию прокси и ликовать, что взломали систему… Пока не пофиксят, естественно.

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

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

При помощи эмуляторов браузера

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

Внедрение 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 может пригодиться систематизация изображений, я не понимаю (придумайте чего-нибудть сами), но это полностью рабочий вариант для легких капч. Это безвозмездно и это отлично.

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

Достоинства: безвозмездно и отлично.

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

Какой способ избрать

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *