Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода

Обход капчи в SEO: что это и не преувеличено ли значение?

Любой профессионал в SEO сталкивался с капчей — а если нет, то он либо не профессионал, либо путает SEO с другими аббревиатурами вроде SMM или СЕО, либо только начал заниматься этим делом. CAPTCHA (правильное написание — заглавными) расшифровывается как Completely Automated Public Turing Test To Tell Computers and Humans Apart, что в переводе звучит как «Полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей». И пока эта защита стоит на страже сайта, полноценное получение данных оттуда становится нелегким испытанием.

Можно долго обсуждать, что CAPTCHA не стоит внимания и ресурсов, но такие аргументы заканчиваются сразу, как только встает задача получить данные из поисковой выдачи Яндекса или же полностью спарсить Amazon, потому что клиент платит за это. А в мире SEO принцип один: клиент всегда прав.

Когда клиент платит хорошо: "Ни слова больше..."

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

Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода

Почему капча используется, несмотря на доступные методы обхода?

Решение внедрить капчу на сайт не всегда просто, и у него есть свои нюансы. Если мы говорим о крупном ресурсе, например, том же Amazon, необходимость защиты данных от парсинга понятна. Amazon — это яркий пример сайта с тремя видами капчи, появляющимися в разных ситуациях. Более того, защита Amazon меняет дизайн, чтобы парсеры не могли воспользоваться старыми методами автоматизации. Сайт с одного раза "узнает" ботов по поведению и частоте запросов, а значит, без постоянного обновления методов обхода не обойтись.

Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода

Amazon и его защита от ботов

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

Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода

Чаще всего такой баланс достигается через использование reCAPTCHA или hCaptcha. Они позволяют защитить сайт от нежелательной активности, но не становятся серьезным барьером для пользователей.

Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода

Зачем SEO-специалисту обход капчи?

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

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

Есть и специалисты, которые делают всё собственными силами, чтобы снизить расходы и не зависеть от сторонних сервисов. Давайте рассмотрим более сложные и эффективные методы обхода капчи.

Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода

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

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

Капча меняет дизайн, мы меняем скрипт. И так бесконечно.

Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода

Сторонние сервисы распознавания капчи

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

Для автоматизации процессов в данном подходе нужно найти на странице параметр sitekey и передать его вместе с URL капчи и API- ключом от сервиса 2captcha. После получения токена его нужно подставить в капчу и продолжить выполнение задачи. Ниже представлен пример универсального кода для решения reCaptcha V2 на Python.

import requests import time API_KEY = 'ВАШ_КЛЮЧ_2CAPTCHA' SITE_KEY = 'ВАШ_SITE_KEY' PAGE_URL = 'https://example.com' def get_captcha_solution(): 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']}") return None captcha_id = captcha_id_response['request'] print(f"Капча отправлена. ID: {captcha_id}") for attempt in range(30): 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('Решение не удалось.')
Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода

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

Обход капчи с использованием прокси и ротации IP-адресов

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

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

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 = "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)

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

Обход капчи с использованием Headless-браузеров

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

Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By import time import random from itertools import cycle proxies_list = [ {"proxy": "proxy1.example.com:8080", "username": "user1", "password": "pass1"}, {"proxy": "proxy2.example.com:8080", "username": "user2", "password": "pass2"}, ] proxy_pool = cycle(proxies_list) def create_browser(proxy=None): chrome_options = Options() chrome_options.headless = True chrome_options.add_argument("--disable-blink-features=AutomationControlled") if proxy: chrome_options.add_argument(f'--proxy-server=http://{proxy["proxy"]}') chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option("useAutomationExtension", False) browser = webdriver.Chrome(options=chrome_options) browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" }) return browser def mimic_user_behavior(browser): actions = [ lambda: browser.execute_script("window.scrollBy(0, 300);"), lambda: browser.execute_script("window.scrollBy(0, -300);"), lambda: browser.execute_script("window.scrollBy(0, random.randint(0, 500));") ] random.choice(actions)() time.sleep(random.uniform(1, 3)) def bypass_captcha(url, num_attempts=5): for i in range(num_attempts): proxy_info = next(proxy_pool) browser = create_browser(proxy_info) try: browser.get(url) mimic_user_behavior(browser) try: element = browser.find_element(By.XPATH, "//h1") print(f"Элемент найден: {element.text}") except Exception: print("Элемент не найден, возможно капча") print(f"Попытка {i + 1} через прокси {proxy_info['proxy']} успешна") except Exception as e: print(f"Ошибка с прокси {proxy_info['proxy']}: {e}") finally: browser.quit() time.sleep(random.uniform(2, 5)) url = "https://example.com" bypass_captcha(url)

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

Обход капчи продвинутым способом — рекомендации для SEO-специалистов с примерами кода

Заключение

Существует несколько эффективных методов обхода капчи, и каждый из них имеет свои преимущества и недостатки. Если задача — обойти капчу на небольшом ресурсе или при парсинге, можно обойтись прокси и Headless-браузерами. Для более сложных проектов подойдут сервисы распознавания капчи.

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

Начать дискуссию