Вот число, которое важно: 150 против 3000. Один и тот же сайт, одна и та же схема парсинга, одинаковое количество запросов в минуту. С обычным Chrome и датацентровым IP я упёрлась в стену CAPTCHA на 150 страницах. С 1Browser и резидентским IP от Floppydata я прошла 3000 страниц за два дня без единой проверки.

Именно эта разница и побудила меня написать эту статью. Если вам нужно только знать, как один раз решить проблему неверной CAPTCHA — я это объясню. Но если CAPTCHA для вас ежедневная проблема, ответ не в том, чтобы решать их быстрее, а в том, чтобы вообще не вызывать их.

Я занимаюсь консалтингом в e-commerce и мониторингом цен. Это значит, что я провожу много времени на сайтах конкурентов, изучая страницы товаров, а значит, много времени кликаю на картинки со светофорами.

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

Что означает «Неверная CAPTCHA» (даже когда вы всё ввели правильно)?

Когда вы видите «неверная CAPTCHA» или «incorrect CAPTCHA», очевидное предположение — вы кликнули не на тот светофор. И иногда так и есть: картинки бывают реально неоднозначными — это крошечный угол светофора или столб?

Но что означает ошибка CAPTCHA, когда вы абсолютно уверены в правильности ответа? Это значит, что система отвергла вашу сессию, а не ваш ответ. Что такое ошибка CAPTCHA на самом деле? Это система говорит: «Я вам не доверяю, независимо от того, что вы нажали».

Причины этого — я узнавала их одну за другой на протяжении примерно года столкновений с ними:

  • Помеченный IP. Это я поняла первым, потому что случай был самым драматичным. Я использовала ExpressVPN для доступа к e-commerce-сайту и провалила одну и ту же reCAPTCHA двенадцать раз. Я начинала сомневаться в своём зрении. Потом отключила VPN, попробовала через домашний wi-fi — прошла с первого раза. Та же головоломка, тот же ответ, тот же человек нажимает. Изменился только IP. Оказалось, нод VPN, которым я пользовалась, до меня использовало достаточно ботов, что система Google его фактически занесла в чёрный список. Каждый, кто подключается через этот нод, наследует репутацию всех, кто был до него.
  • Несоответствие фингерпринта. Это я поняла спустя месяцы, потому что не видела, как это происходит. Я использовала немецкий прокси, но браузер по-прежнему сообщал мой реальный часовой пояс, реальный системный язык, реальное разрешение экрана. Для системы CAPTCHA это выглядело как кто-то, притворяющийся, что находится в Германии, — чем и являлось на самом деле. Несоответствие между тем, где по IP я находилась, и тем, где по браузеру я находилась, обрушивало мой рейтинг доверия ещё до клика на первое изображение.
  • Истёкший токен. Я встала подлить кофе во время CAPTCHA и вернулась примерно через шесть минут. Провал. Оказывается, у токена есть окно — судя по всему, от двух до пяти минут в зависимости от системы. Я не знала, что токены имеют время жизни, пока это не случилось.
  • Расширения, блокирующие JavaScript. uBlock Origin сломал reCAPTCHA на одном конкретном e-commerce-сайте. Не на других сайтах — только на этом. CAPTCHA появлялась нормально, я кликала все картинки, нажимала «Отправить» — и получала «Неверная». Так продолжалось три недели, прежде чем я додумалась попробовать отключить расширения. Три недели обвинений в адрес сайта.
  • Вы действительно ошиблись. Однажды я приняла автобус за грузовик и была лично оскорблена этой обратной связью.

Что такое CAPTCHA и какие виды бывают?

Пожалуй, стоит объяснить, что означает само слово CAPTCHA, раз уже употребила его 400 раз без определения. Completely Automated Public Turing test to tell Computers and Humans Apart — полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей.

Я снова это проверила, потому что никогда не помню, «Public» или «Practical». Public. CAPTCHA — это вся цепочка: сайт показывает головоломку, вы её решаете, сайт решает, верить ли вам.

Основные виды CAPTCHA, с которыми вы столкнётесь, — и они сильно различаются по степени раздражения:

  • reCAPTCHA v2 — та самая с флажком «Я не робот». Иногда достаточно просто флажка. Иногда переходит к выбору изображений. Светофоры, пешеходные переходы, автобусы, витрины магазинов, пожарные гидранты. Я кликаю на пожарные гидранты три года и начинаю задаваться вопросом, смогу ли нарисовать один по памяти. Google этим управляет, и моя совершенно бездоказательная теория — они используют выборки изображений для обучения моделей беспилотных автомобилей.
  • reCAPTCHA v3 — невидимая. Работает в фоне, выставляет оценку от 0,0 до 1,0, и если оценка слишком низкая — сайт вас блокирует без объяснений. Вы никогда не видите проверку. Просто получаете блокировку и не знаете, почему. Я ненавижу v3 больше, чем v2, потому что v2 хотя бы даёт возможность попробовать.
  • hCAPTCHA: лодки, мотоциклы, велосипеды. Используется Cloudflare.
  • Текстовые CAPTCHA: почти исчезли, кроме государственных порталов.
  • Ползунковые CAPTCHA: распространены на китайских платформах, нужно передвинуть фрагмент пазла.
  • Аудио-CAPTCHA: теоретически для доступности, на практике сложнее визуальных. Пробовала аудио-CAPTCHA примерно шесть раз и прошла один.

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

  1. Очистить куки и кэш. Я всегда пробую это первым, потому что занимает десять секунд и помогает примерно в трети случаев. Система CAPTCHA использует данные вашей сессии для формирования истории поведения. Старые куки от предыдущей неудачной сессии несут эту негативную историю дальше. Их удаление — как войти обратно в магазин в другой одежде после того, как вас выставили за дверь.
  2. Отключить все расширения и попробовать снова. Этому я потеряла три недели жизни. У меня было расширение Decentraleyes, установленное где-то в октябре и полностью забытое. Оно блокировало скрипт обратного вызова reCAPTCHA на одном конкретном e-commerce-сайте. CAPTCHA нормально загружалась визуально, я кликала все правильные картинки, нажимала «Подтвердить» — и каждый раз получала «Неверная». Поняла только потому, что попробовала тот же сайт с телефона, где нет расширений — прошла с первого раза. Стыд от трёх недель обвинений в адрес сайта, когда всё это время проблема была в моём собственном расширении, был значительным.
  3. Проверить, какой IP вы представляете. Зайдите на любой сайт определения IP. Если написано, что вы на датацентровом IP или известном VPN-ноде — это почти наверняка и есть причина, по которой CAPTCHA вас не пускает. Не могу достаточно это подчеркнуть, потому что это была та переменная, которую я дольше всего игнорировала. Та же CAPTCHA, идентичный ответ — проходит на резидентском IP и проваливается на датацентровом. Система знает, какие диапазоны IP принадлежат серверам, а какие квартирам. Относится к ним совершенно по-разному.
  4. Открыть Firefox, если используете Chrome. Или наоборот. Бывало, что одна и та же reCAPTCHA на одном и том же сайте проваливалась одиннадцать раз в Chrome и проходила с первого раза в Firefox. Одна и та же сеть. Браузеры генерируют разные canvas-хеши и WebGL-данные, и система CAPTCHA оценивает их по-разному.
  5. Перестать пытаться на десять минут. Сходить заняться чем-нибудь другим. Звучит бессмысленно, но ограничение частоты запросов в системах CAPTCHA сбрасывается при бездействии. Каждый раз, когда вы проваливаетесь и немедленно пробуете снова, вы сигнализируете системе, что настойчивы так, как обычные пользователи не бывают. Боты повторяют немедленно. Люди раздражаются и уходят. Уход — это человеческое поведение, которого ожидает система.
  6. Если вы делаете это каждый день — перестаньте решать CAPTCHA и начните их предотвращать. Индивидуальные решения не масштабируются. Я тратила по двадцать минут в день на это, прежде чем полностью изменила подход. Следующий раздел об этом.

Как я перешла от двадцати минут ежедневных CAPTCHA к нулю

Число 150 против 3000 из начала статьи получилось из теста, который я провела в прошлом месяце, — но причиной теста стало то, что коллега несколько недель твердил, что я всё делаю неправильно. Однажды он наблюдал, как я кликаю через CAPTCHA, и спросил, почему я не использую антидетект-браузер. Я сказала, что не знаю, что это такое. Он открыл свой экран и показал мне свою схему.

Он использовал 1Browser. У каждого профиля браузера был свой фингерпринт, свои куки, свой прокси, свой часовой пояс, свои языковые настройки. Я спросила, как часто он получает CAPTCHA. Он сказал, что не помнит, когда последний раз видел их. Я не поверила. Поэтому в тот же день после обеда настроила то же самое на своей машине и запустила свою обычную задачу парсинга через неё.

На обычном Chrome с датацентровым IP я как по часам упиралась в CAPTCHA на 150 странице. Через 1Browser со встроенным прокси добралась примерно до 900 страниц, прежде чем увидела одну. Уже это было колоссальным улучшением, но коллега сказал, что я всё равно использую неправильный вид IP.

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

Флагить нечего. Я подключила резидентский IP Floppydata к своему профилю в 1Browser и снова запустила ту же задачу парсинга. 3000 страниц. Два дня. Ни одной CAPTCHA. Написала коллеге, что он был прав, — он ответил смайликом с поднятым большим пальцем, что я сочла неадекватной реакцией на то, что было поистине судьбоносным открытием для моего ежедневного рабочего процесса.

Пожарные гидранты исчезли. Я перешла от двадцати минут ежедневных CAPTCHA к нулю. Не потому что нашла лучший сервис решения CAPTCHA или более быстрый способ кликать на светофоры. Потому что светофоры перестали появляться. Коллега спросил, скучаю ли я по ним. Немного. Хотя нет, не скучаю.