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

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

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

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

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

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

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

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

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

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

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

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

Амазон и его защита от ботов 
Амазон и его защита от ботов 

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

Уровень защиты сайта: Приемлемо 
Уровень защиты сайта: Приемлемо 

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

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

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

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

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

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

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

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

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

Наиболее популярный способ обхода капчи — использование специализированных сервисов, таких как 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('Решение не удалось.')
 Я в 3 часа ночи: 'Всего одна строчка кода, и капча будет обходиться автоматически.   
 Я в 3 часа ночи: 'Всего одна строчка кода, и капча будет обходиться автоматически.   

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

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

 Мой бот, когда сайт усиливает защиту: 'Я? Я просто мимо проходил.'   
 Мой бот, когда сайт усиливает защиту: 'Я? Я просто мимо проходил.'   

Заключение

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

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

22
22
37 комментариев

Нахуя ты этот понос сюда принёс? Для таких как ты VC.RU насрали

2
Ответить

Так вот какая тварь тут говнопостит на не русском языке

1
Ответить

Что значит на нерусском? Почему тварь и собственно с чего это вдруг говнопост? Так много вопросов после одного комментария

2
Ответить

Посмотрел код. Но ведь ты селениумом только наследишь, а значит увидишь капчу и не пройдёшь тест на бота на любом из этих сайтов:
1. https://www.browserscan.net/bot-detection
2. https://nowsecure.nl
3. https://bot.incolumitas.com
4. https://bot.sannysoft.com

Селениум оставляет очень много следов о том, что это бот, а значит надо заспавнить капчу

Ответить

Ну так Селениумом в связке с другими инструментами, е-мае. И нафиг мне не нужно парсить эти сайты для решения сеошных задач. Яндекс надо спарсить и Гуголь

Ответить

Xevil +ipv6

Ответить