Принципы решения reCAPTCHA 2

Как устроена внутренняя кухня при решении Рекапчи и как выбирается блок Рекапчи, для которой будет выполнена callback-функция.

Общие принципы

Когда наше расширение находит на странице блок reCAPTCHA 2 (не важно обычная это Кекапча или invisible) оно посылает API запрос к сервису anti-captcha.com, передаем ему Site key и домен сайта и ожидает от него ответа в виде специального Хеша. Этот хеш записывается в невидимое текстовое поле на странице рядом с Рекапчей. Далее при отправке формы этот хеш получает целевой сайт, валидирует его у Гугла и, убедившись что все впорядке, продолжает нормальную работу. Целевой сайт может использовать специальную callback функцию, о ней специальный подраздел ниже.

Invisible (невидимая) Рекапча

Особый тип капчи, который выглядит как небольшой значок Рекапчи, находящийся обычно в правом нижнем углу сайта. Явно не требует от пользователя незамедлительного решения капчи. И обычно она привязывается к кнопке отправки формы. При ее нажатии алгоритмы Гугл анализируют поведение пользователя и, при подозрении в использовании автоматизации, показывает блок, в котором предлагается выбрать витрины магазинов, дорожные знаки и т. д.. После успешного прохождения теста пользователем вначале вызывается Callback функция (если есть), а затем отправляется форма.

Для нашего расширения нет особой разницы какую Рекапчу решать. Разве что в случае с невидимой Рекапчей есть возможность сэкономить немного денег, используя опцию "Начинать разгадывать reCAPTCHA 2 только при появлении окна с выбором изображений", о ней вы можете почитать больше на странице с советами по финансовой оптимизации работы нашего расширения.

Несколько Рекапч на одной странице

На одной веб странице всегда может оказаться несколько Рекапч, например, одна для блока с регистрацией, другая для авторизации и так далее. Причем чаще всего все обычные Рекапчи имеют один Site key (уникальный ключ для каждого домена в системе Recaptcha 2), а рекапчи типа invisible — другой. Мы группируем все Рекапчи с одинаковым sitekey и сервису anti-captcha.com отправляется одно, максимум два задания (если на странице присутствует и обычная и invisible рекапчи) на решение. Тем самым достигается экономия ваших средств.

Callback функция

Часто для полного решения Рекапчи необходимо не только само хеш-решение, которое мы получаем от anti-captcha.com, но и выполнение определенной JS функции, которую владелец целевого сайта указал при настройке Рекапчи в качестве той, которую надо выполнить после успешного прохождения капчи. Так называемая callback функция.

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

О приоритетах вызова callback функции для Рекапчи

Главный (первый) приоритет имеет блок Рекапчи, который был указан в API запросе в методе solveRecaptcha. Т.е. если вы явно в API запросе указали, что хотите решить вот эту конкретную Рекапчу, то callback почти наверняка будет вызван для нее, не зависимо от других факторов: скрыт этот блок в браузере или нет и т. д.

Далее приоритет отдается одному единственному видимому в браузере блоку Рекапчи. Это наиболее частый случай. Так как мы не можем знать наверняка, какую Рекапчу наш клиент задумал решать, то на момент окончания решения из их множества выберается одна, которая не скрыта от пользователя, и для нее вызывается callback. Если Рекапча одна на странице — то она все-равно должна быть видна пользователю, иначе callback не вызывается!

Причем тип рекапчи "невидимая" (invisible) не является в нашем понимании скрытой от пользователя. Ее значок все-равно виднеется в правом нижнем углу и мы ее интерпритируем так же, как и обычную. Вот если этот значок специально совсем скрыт от глаз пользователя в браузере, то тогда эта рекапча интерпритируется как скрытая и она не получит приоритет при вызове callback.

Последняя в приоритете вызова callback Рекапча, это та, которая была вызвана с учетом включенной опции "Начинать разгадывать reCAPTCHA 2 только при появлении окна с выбором изображений".  Т. е. если опция включена, и среди множества Рекапч на странице для какого-то блока появится окно, где надо выбрать светофоры или витрины магазинов, то, согласно идее этой опции, начнется сам процесс решения капчи и в итоге callback будет вызван именно для этого блока Рекапчи, но только если не выполняются два вышеуказанных условия (вызов API метода solveRecaptcha или одна единственная видимая Рекапча), которые являются более приоритетными.

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