Расширение для решения капчи в браузере

Обновлено: 08.07.2024

ReCaptcha (она же всенародно любимая «капча») — одна из самых болезненных вещей, с которой может столкнуться автоматизатор тестирования на своём пути. В Сети гуляют тысячи разнообразных видео, записанных выходцами из солнечной Индии, касательно того, какими танцами с бубном возможно обмануть этого зверя. Действительно, достаточно сложно пытаться взаимодействовать с помощью запрограммированных скриптов со штукой, основная цель которой — убедиться что «вы не робот».

Очень важный дисклеймер: обмануть капчу невозможно.

Если вы уже столкнулись с этой проблемой, и читаете эту статью, пытаясь нагуглить рецепт панацеи, то знайте, что его не существует. Тем более, в вашей голове уже скорее всего возникли инновационные мысли о том, чтобы сымитировать реалистичное поведение пользователя с помощью WebDriver, путём рандомного mouse overing'а элементов, кликов по инпутам, и бережно расставленных Thread.sleep(). Абсолютно точно известно, что этот подход работать не будет, не тратьте свое время попусту.

image

Получается, выхода нет?

Не все так пессимистично. Иногда достаточно постараться дать себе наиболее точный ответ на вопрос «Какая задача передо мной стоит?» и посмотреть на ситуацию шире. В большинстве случаев, вы поймете, что ваша цель не обмануть капчу, а обойти её, чтобы протестировать функционал, спрятанный за ней. На примере своего кейса, я поделюсь с вами найденными мною вариантами решения поставленной задачи.

Контекст: мы интегрировали часть своего продукта внутрь стороннего сервиса, и хотели мониторить, все ли в порядке на их стороне, т.к. они не занимаются покрытием third-party частей своей платформы. Чтобы получить доступ к нашему функционалу, сперва необходимо было залогиниться. Тут-то я и встретился с капчей лицом к лицу. Далее привожу все перепробованные мною варианты обхода данной проблемы.

Нерабочие

Залогиниться через Google или Facebook

Помимо классической аутентификации, присутствовали каноничные «Login with Google / Facebook». Само собой, там точно также присутствовали свои «капчи», поэтому этот вариант не помог решить проблему.

Имитация поведения пользователя

Да, я тоже это пробовал. Было забавно, но чересчур наивно.

Рабочие

Chrome / Firefox Profiles

Поговорим о первом «живом» варианте. В драйверах для этих браузеров (chromedriver / geckodriver) реализована возможность загружаться под заранее заготовленным User Profile. Он хранит в себе все сохраненные пароли, куки, сессии, и даже историю браузера и закладки. Т.е. таким образом мы попросту пропускали абсолютно неважный для нашей задачи шаг логина, и таким образом попадали сразу на страницу с объектом тестирования. Реализуется это следующим образом:

  1. Создаем «чистый» профиль браузера
  2. Вручную вводим капчу и логинимся на нужный ресурс
  3. Копируем необходимый профиль в наш проект (HOWTO для Firefox и Chrome)


Этот подход хорошо показал себя при тестировании на локальной машине с установленным браузером и обычными gecko-/cromedriver’ами, но возникли проблемы при запуске на Jenkins. Мы поднимаем Selenium хаб и ноды внутри Kubernetes кластера, поэтому мы столкнулись с неприятностями в виде слишком долгого по времени маунта директории внутрь контейнера (чистый профиль в среднем весит около 25 MB, что немало), а так же некоторых проблем с CRUD правами браузера, который не мог вносить изменения в профайл в рантайме, и падал с “unknown error: failed to write prefs file” эксепшеном. Ко всему прочему, апдейтить профайл после достижения куками и сессиями своих Expiration Dates достаточно неудобно, да и не хотелось держать в проекте огромную папку с внутренностями профиля, поэтому в конечном итоге окончательным был выбран следующий вариант.

Cookies

“А ларчик просто открывался” — именно так можно было охарактеризовать ситуацию, после того, как мы просто добавили полученные вручную куки в драйвер. Алгоритм действий максимально прост и не зависит от выбранного браузера:

  1. Логинимся вручную
  2. Через Network смотрим Request Headers -> Cookie которые посылает наш браузер


Очевидный минус этого подхода — необходимость вручную менять куки после истечения их срока валидности. Но, в виду того что на тестируемой платформе этот срок составляет 3 месяца — мы и выбрали это решение.

А если мне не нужно логиниться?

А как же ситуация, когда речь идет не о авторизации и сессиях, а о совершении какого-либо одноразового действия (e.g. оформление заказа из корзины, регистрация нового пользователя и т.п.)? Здесь ситуация еще хуже. Два варианта которые я смог обнаружить, это:

  1. Договориться с вашими разработчиками о предоставлении вам некого workaround'а. Google предоставляет такую возможность, но помните, что вы осознанно делаете небольшую дыру в security.
  2. Воспользоваться сторонними платными сервисами, которые принимают с вашей стороны скриншот капчи, пытаются его декодировать, и отправляют вам расшифрованное значение. Сам я такой способ не пробовал и полностью рекомендовать его не могу.

Подведем итоги

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

В 2011 году 75-летний юбилей термина «спам» знаменовался вводом капчи 200 миллионов раз ЕЖЕДНЕВНО!


Все эти вводы — следствие борьбы администраторов сайтов со спам-ботами.

Автоматизация процесса распознавания капчи для множества людей, активно ведущих бизнес в Интернете, является насущной проблемой. Можно относиться к таким бизнесменам и специалистам как к «нехорошим и надоедливым спамерам». Однако остановить процесс спам-постинга, по крайней мере, в обозримом будущем возможным не представляется.

Ссылочный маркетинг здесь полноценно и уникально сочетает в себе решение задач продвижения, повышения репутации продвигаемого сайта в глазах поисковых систем. Происходит это по той простой причине, что каждая ссылка на сайт (в т.ч. и из спам-поста) повышает его позиции в выдачах Google, Яндекса и т.д. Следовательно, такой способ «убийства двух зайцев одним выстрелом» выгоден изначально. И значительная часть Интернет-бизнесменов должны не бороться со спам-постингом, а пытаться использовать его в своих целях.

Итак, актуальность решения задачи «обход капчи» сомнений не вызывает.


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

Поэтому уже не первый год активно развиваются специализированные программные продукты — автоматические постеры. Часть из них достаточно известна на рынке (тот же XRumer), часть – разработана и используется только внутри некоторых фирм. В случае применения автоматического постера решение задачи «как обойти капчу» возможно двумя способами:

  • её ручным вводом или использованием сервисов, где распознавание производится людьми-операторами;
  • дополнением софта постера модулями автоматического распознавания капчи.

Ручной ввод

Отметим сразу, что ручной ввод неприемлем при серьёзных объёмах постинга.

Распознавание капчи сегодня можно поручить специальным сервисам (например, antigate). Цена вопроса – $1-2.5 за тысячу распознаваний. К недостаткам этого метода относятся:

  • постоянные финансовые затраты при каждой компании постинга;
  • большие временные задержки при распознавании. В среднем капча-сервисы обещают проводить распознавание за
    5-20 секунд. Хотя это уже и немало, но фактически это время может оказываться и значительно больше.

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

Программное распознавание

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

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



Рис. 1 — Распознавание старой версии капчи CMS Битрикс




Рис. 2 — Распознавание новой версии капчи CMS Битрикс


Во что обойдётся разработка программы для распознавания капчи? $100-500, в зависимости от её типа, сложности. Отметим, что это разовая трата. Таким образом, в отличие от капча-сервисов, автоматическое распознавание позволяет серьёзно выигрывать в цене вопроса. Кроме того, обеспечивается также и существенный выигрыш во времени: распознавание софтом редко занимает более секунды.

Напоминаем, что посмотреть все «сделанные» нами капчи можно на нашем сайте в разделе портфолио.

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


image

Amazon’s CAPTCHA fallback

КАПЧА (от CAPTCHA англ. – полностью автоматизированный и общедоступный тест Тьюринга для различения компьютеров и людей) задумана как врата, которые пропускают людей и отсеивают роботов (программ). Волнистые линии и слова сейчас уже не так распространены –их заменила вторая версия реКАПЧИ от Google. Эта капча выдает вам зеленую галочку, если ваш «коэффициент человечности» оценивается как достаточно высокий.

Если же вы не дотянули до заданного порога «человечности», то реКАПЧА прибегает к использованию подобной паззлу картинки, которая на удивление эффективна скорее в том, чтобы еще сильнее действовать на нервы, по сравнению с расшифровкой пары слов.


image

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

Как работает 2Captcha

2Captcha решает много разных типов капчи. Для взаимодействия с 2Captcha используются два адреса: на in.php присылается задача и в ответ Вы получаете captcha_id, на res.php вы по captcha_id получаете ответ, когда он будет готов.

2Captcha решает капчи в нескольких различных стилях с помощью двух, по большей части одних и тех же, конечных точек обработки запросов. Первый запрос передает данные, необходимые для решения капчи, и возвращает ID запроса. В случае капчи на основе изображения, данные будут изображением самой капчи, закодированным в 64base.


image

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


image

image

С Recaptcha V2 история немного другая. Вы по-прежнему имеете дело с двухступенчатым процессом, что и представленный выше, но отправляете другие данные. Теперь вам нужно отправлять публичный ключ рекапчи (reCAPTCHA sitekey), который можно найти среди атрибутов элемента-контейнера капчи, независимо от того, был ли загружен


image

Для капч, основанных на изображениях, результат доступен почти мгновенно. Для реКАПЧ версии 2 может потребоваться от 15 до 30 секунд.

Автоматизация через Puppeteer

Прежде чем беспокоиться о капче, нужно разобраться со всем прочим, но прежде чем мы сможем это сделать, нужно определиться с нашими инструментами. 3 причины, по которым в данном посте мы будем использовать Google’s Chrome:

  1. В нем все очень легко автоматизируется через Puppeteer API.
  2. На нем можно работать как в headless-режиме, так и с графическим интерфейсом, что очень удобно и практично.
  3. Это самый распространенный в мире браузер, поэтому все имеющиеся на сайтах приемы анти-автоматизации имеют меньший шанс срабатывания (например, блокировка Selenium или PhantomJS)

Использование Puppeteer

Необязательно устанавливать хром, если не хочется, в Puppeteer есть все необходимое, в том числе Chromium. Но можете использовать и локально установленный Chrome, решать вам.

Убедитесь, что все настроено, устроив предварительный тест. Для этого упражнения мы будем автоматизировать страницу регистрации Reddit, просто потому что это была первая страница с рекапчей, которая мне попалась.

В этом коде мы указываем два свойства конфигурации при запуске: headless: false, чтобы видеть то, что мы делаем, и defaultViewport: null, чтобы учесть неприятный визуальный глитч, при котором область просмотра не заполняет окно. Ни тот, ни другой не важны для работы браузера в headless-режиме, просто с ними удобней видеть и, что самое важное, делать скриншоты. Например, такой:


image

Это было просто! Теперь мы готовы перейти к следующему шагу – автоматизировать регистрацию так, будто капчи никогда и не было. Вот где возможность включать/ выключать headless-режим будет полезна, ведь мы можем управлять браузером от лица человека, когда нужно. Сначала следует понять, как получить доступ к элементам на странице, которые нужно поменять. Запустите браузер и просмотрите открытую страницу через инструменты разработчика Google Chrome (горячая клавиша – F12). Далее, найдите текстовые поля, которые нужно будет изменить. (горячие клавиши: ⌘+Shift+C на Mac и Ctrl+Shift+C на Windows) В случае с Reddit, нам нужно получить прямой доступ к полю ввода логина, двум полям ввода пароля и кнопке. Электронная почта необязательна, так что можем ее проигнорировать. Печать в текстовых полях через API библиотеки Puppeteer почти до смешного проста: вы просто передаете селектор, который идентифицирует элемент, и желаемую строку с помощью метода .type().

Производить операции с кнопкой так же удобно, разве что у кнопки на странице Reddit нет связанного с ней идентификатора, так что нам нужен более сложный селектор. Если вы не знакомы с селекторами CSS, то для краткого ознакомления посмотрите Mozilla Developer Network.

Вот и всё! Протестируйте скрипт, чтобы удостовериться, что отправка логина работает. Из-за КАПЧИ, конечно, ничего не получится, но зато мы можем протестировать работу хуков.


image

Подождите-ка! Мы ведь даже не видим капчу, и консоль JavaScript жалуется на ошибки. Что здесь происходит? Во время автоматизации веб-страниц, помимо капч, есть множество других препятствий, которые могут встать у вас на пути. И одна из них – настолько высокая скорость выполнения операций, что страница ломается. Когда браузеры автоматизированы, они работают во много-много раз быстрее, чем на то способен обычный человек, и зачастую это приводит к выполнению кода в таком порядке, в каком разработчики его не тестировали (это называется состоянием гонки или неопределённость параллелизма).

После добавления этой опции мы видим, что капча снова работает. Ради забавного эксперимента, можно попробовать пройти капчу прямо сейчас и посмотреть что будет. Поскольку мы используем вариант Chromium с настройками по умолчанию, который запускается библиотекой Puppeteer, и мы управляем им через средства автоматизации, то реКАПЧА будет изо всех сил пытаться доказать, что мы не человек. Вам, вероятно, придется пройти несколько уровней проверки, даже если вы разберетесь со всеми картинками. Когда я тестировал это, мне пришлось пройти через 10 различных повторений, прежде чем я получил зеленую галочку.

К счастью, все это можно сделать намного легче.

Настройка 2Captcha

2Captcha требует API ключ, который выдается при регистрации. Вам также потребуется какое-то количество средств, потому что, не всё в жизни бесплатно. И просто ради смеха, конечно же, вам понадобиться пройти КАПЧУ.

После того как вы сделали этот запрос и получили обратно идентификатор запроса, вам нужно запросить URL «res.php», используя ваши ключ API и идентификатор запроса, чтобы получить ответ.

Для reCaptcha V2 время нахождения решения может различаться – минимум 15 секунд, максимум – 45. Ниже показан пример механизма опроса, но в этот раз простого запроса по URL, который может быть интегрирован в ваше приложение так, как вам будет удобно.

Как только у вас есть данные ответа, вам нужно вставить результат в скрытое текстовое поле g-recaptcha-response в форме регистрации Reddit. Это не так просто, как использование метода .type() библиотеки Puppeteer, так как элемент невидим и не может получить фокус ввода. Можно сделать его видимым и затем использовать .type(), или же использовать JavaScript, чтобы внедрить значение на страницу. Для добавления JavaScript на страницу, при использовании Puppeteer, у нас есть метод .evaluate(), который принимает либо функцию, либо строку (при передаче функции она просто преобразуется в строку с помощью метода .toString()), и запускает ее в контексте страницы.

После внедрения этого значения у нас все готово для завершения регистрации. Это действительно так просто.

Полный скрипт доступен ниже, если вам захочется поэкспериментировать с Puppeteer и/или 2Captcha.

Что вы теперь можете сделать?

Этот пост был написан ради двух вещей:

1. Показать вам, насколько капчи нехорошая вещь

2. Показать вам, что капчам нет необходимости блокировать вас

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

Лучшие расширения для автоматического распознавания и обхода капчи

PC

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

Некоторые капчи могут быть очень трудными для чтения, даже для людей с хорошим зрением. Другие капчи могут быть действительно раздражающими, например Google reCAPTCHA. Не довольствуясь тем, что вам приходится решать одну визуальную головоломку, ReCAPTCHA иногда требует, чтобы вы решали четыре или пять головоломок подряд. И если вы введете неправильные символы или нажмете не ту кнопку, вы должны повторить все сначала, пока не сделаете все правильно.

AntiCaptcha

Лучшие расширения для автоматического распознавания и обхода капчи

Сначала вам нужно зарегистрировать аккаунт AntiCaptcha, а затем внести средства. Вы можете заплатить столько, сколько захотите, примерно за 1 доллар вы получите 1000 решений CAPTCHA или 500 решений ReCAPTCHA. Цены колеблются в течение дня, поэтому вы будете платить больше за решение капчи в часы пик. Пользователи Chrome могут получить 15 пробных кредитов, установив расширение и авторизовав его с помощью учетной записи Google.

AntiCaptcha может решить большинство типов капч, включая Google ReCAPTCHA, FunCaptcha, Geetest, Solve Media и стандартные изображения CAPTCHA. Первые три, которые мы упоминаем, могут быть решены автоматически, когда вы загружаете страницу, содержащую одну из этих капч. Другие обычные типы требуют, чтобы вы щелкнули правой кнопкой мыши на поле ввода ответа и выбрали «Найти изображение CAPTCHA для этого ввода» или нажмите Ctrl + Shift + 6.

Средняя скорость прохождения изображения CAPTCHA разумна и обычно занимает 5-20 секунд. Решение ReCaptcha иногда занимает некоторое время и может занять 30-60 секунд довольно часто. Может помочь настройка кэширования в расширении, хотя она немного ускоряет использование вашего кредита. AntiCaptcha, пожалуй, единственная доступная служба, которая имеет собственные расширения браузера, обрабатывает наиболее распространенные типы CAPTCHA и может помочь вам начать с минимальными затратами.

Данный представитель, пожалуй, занимает уникальное место на рынке решений капчи, потому что он с открытым исходным кодом, бесплатен в использовании и не требует подписок. Он работает с использованием распознавания речи, чтобы попытаться решить голосовую капчу. Недостатком является то, что это расширение работает только для Google ReCAPTCHA, но это, вероятно, самая распространенная форма CAPTCHA на сегодняшний день. Доступны расширения для Chrome, Firefox и Opera.

После установки расширения, Buster Captcha Solver очень прост в использовании и требует всего пару щелчков мыши, чтобы решить капчу. Когда вы встретите ReCAPTCHA, нажмите «Я не робот», чтобы открыть окно вызова. Внизу появляется оранжево-зеленый значок, нажмите на него, и откроется окно голосового вызова, и Buster начнет решать CAPTCHA. Решение на самом деле довольно быстрое и обычно выполняется менее чем за 30 секунд, намного быстрее, чем платная AntiCaptcha.

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

Rumola

Rumola существует уже довольно давно и, вероятно, является одним из самых старых сервисов такого типа. Расширение для браузера Rumola раньше было доступно для браузеров Firefox, Chrome и Safari, но, к сожалению, версии Firefox и Safari исчезли. Существует программа на основе Javascript, которая может работать практически на любом устройстве, подключенном к Интернету. Она очень ограничена, но заставляет сервис работать в других браузерах, которые не могут использовать расширения Chrome.

Лучшие расширения для автоматического распознавания и обхода капчи

Rumola работает для решений CAPTCHA, где вы должны ввести показанные слова, цифры, символы или решить математические головоломки. Он не работает с Google ReCAPTCHA или с капчой, где вам нужно выбрать, изменить порядок или повернуть изображения. По умолчанию Rumola будет автоматически искать CAPTCHA на посещаемых веб-страницах, хотя этот параметр можно отключить в меню расширений на панели инструментов Chrome.

Если Rumola обнаружит CAPTCHA на странице, он наложит небольшой значок на изображение и текстовое поле ответа. Просто дважды щелкните внутри пустого текстового поля ответа, и Rumola начнет искать решение капчи. Или начните вводить текст в любом другом текстовом поле на странице. Если CAPTCHA не была обнаружена, вы можете попробовать «Поиск CAPTCHA на этой странице» в меню расширений.

Если после поиска на странице ничего не обнаружено, щелкните правой кнопкой мыши на изображение CAPTCHA и выберите «Распознать это изображение как CAPTCHA». Если маленький значок не анимируется, щелкните правой кнопкой мыши на текстовом поле ответа и выберите «Использовать это поле для ввода CAPTCHA». Комбинация одного или обоих из этих вариантов должна обнаружить и решить CAPTCHA. Румола, как правило, довольно быстрая, и часто требуется всего 5-10 секунд, чтобы решить CAPTCHA.

Первая установка Rumola даст вам 5 бесплатных кредитов для тестирования. Хотя бесплатные кредиты ненадежны, и иногда вы теряете их все за то, что делаете что-то простое, например, пытаетесь обнаружить капчу на странице. Цена составляет 0,99 доллара США за 50 кредитов, действительных в течение 1 года, или 1,95 доллара США за 150 кредитов, действующих в течение шести месяцев. Это очень дорого по сравнению с другими сервисами, так что Rumola, вероятно, лучше подходит для пользователей, которым нужно время от времени решать случайные капчи.

ReCaptcha Solver

Перед использованием ReCaptcha Solver необходимо зарегистрироваться и приобрести кредит с помощью DeathByCaptcha, 2captcha, ImageTyperz, Anti-Captcha, BestCaptchaSolver или EndCaptcha. Затем вы можете выбрать свой сервис CAPTCHA из выпадающего списка, ввести его ключ API или имя пользователя / пароль и начать использовать расширение для решения ReCAPTCHA.

Мы попробовали это расширение с AntiCaptcha и EndCaptcha, и оно работало как задумано. Однако мы не можем поручиться за то, насколько хорошо он работает с другими поддерживаемыми сервисами решения CAPTCHA. Скорость, очевидно, будет зависеть от самого сервиса и от того, насколько быстро он решает ReCAPTCHA.

Последнее замечание: вероятно, лучше всего использовать комбинацию плагинов Buster для решения ReCAPTCHA и AntiCaptcha для решения остальных. ReCAPTCHA является наиболее распространенным типом CAPTCHA, и его решение с помощью AntiCaptcha обходится дороже, поэтому использование Buster означает, что ReCAPTCHA будет решаться быстрее, а кредит AntiCaptcha будет сохранятся для всего остального.

Читайте также: