Как сделать обход капчи на питоне

Обновлено: 01.07.2024

GasikPasik

Участник

Здравствуйте всем.
У меня вопрос, существует ли какой-нибудь способ обхода капчи, универсальный скрипт или что-то подобное? Действительно пытался гуглить и потратил уйму времени. (Честно говоря на ру интернете мало инфы об этом).
Капчи подобные этим:

Даже разгадка 4/5 уже будет хорошо.
Как обычно кодеры обходят капчи? Пишут свой код под конкретные стили капчи?

clrn1w

Известный

Прочитай про rucaptcha. Так же есть библиотека для rucaptcha - cсылка, там в примерах все подробно описано

GasikPasik

Участник

Прочитай про rucaptcha. Так же есть библиотека для rucaptcha - cсылка, там в примерах все подробно описано

GasikPasik

Участник

Прочитай про rucaptcha. Так же есть библиотека для rucaptcha - cсылка, там в примерах все подробно описано

Погоди, это платный вариант так ведь? То есть всё завязано на том, что мы посылаем капчу на сайт и ждё м ответа? Предварительно создать аккаунт и закинуть на баланс n-сумму?

NOTBABYALONE

Известный

Здравствуйте всем.
У меня вопрос, существует ли какой-нибудь способ обхода капчи, универсальный скрипт или что-то подобное? Действительно пытался гуглить и потратил уйму времени. (Честно говоря на ру интернете мало инфы об этом).
Капчи подобные этим:

Даже разгадка 4/5 уже будет хорошо.
Как обычно кодеры обходят капчи? Пишут свой код под конкретные стили капчи?

лол. это же пайтон. прикрути к скрипту уже готовый ИИ по определению текста/цифр на картинке и всё. то есть. image->text сделать это ничего не мешает. и причём это никакие не сказки. а реальная практика. скриншот экрана делай, получай цифры. желательно обрезать скриншот и оставлять только область с табличкой капчи. и ещё нужно знать может ли быть что-то поверх таблички чтобы ничего не мешало лишнее. дальше эмулируй нажатия. это насколько я понял гта 5. проект смотрарейж

clrn1w

Известный

Погоди, это платный вариант так ведь? То есть всё завязано на том, что мы посылаем капчу на сайт и ждё м ответа? Предварительно создать аккаунт и закинуть на баланс n-сумму?

да, одна капча 0,15р вроде. Есть сервис за капчу 0,05р, не помню название. Можно конечно через openCV, но лишний геморрой.

GasikPasik

Участник

лол. это же пайтон. прикрути к скрипту уже готовый ИИ по определению текста/цифр на картинке и всё. то есть. image->text сделать это ничего не мешает. и причём это никакие не сказки. а реальная практика. скриншот экрана делай, получай цифры. желательно обрезать скриншот и оставлять только область с табличкой капчи. и ещё нужно знать может ли быть что-то поверх таблички чтобы ничего не мешало лишнее. дальше эмулируй нажатия. это насколько я понял гта 5. проект смотрарейж

Да это смотра)
Извини за возможно глупый вопрос, но есть какие-то просто народные название "ИИ по определению текста/цифр"? Просто по таким и подобным запросом ты получаешь гайды и статьи о том как это написать. Может подскажешь конкретное? Конечно, если не сложно, спасибо.

NOTBABYALONE

Известный

Да это смотра)
Извини за возможно глупый вопрос, но есть какие-то просто народные название "ИИ по определению текста/цифр"? Просто по таким и подобным запросом ты получаешь гайды и статьи о том как это написать. Может подскажешь конкретное? Конечно, если не сложно, спасибо.

pytesseract как один из вариантов. но можно поискать и другие модули какие-нибудь. таких достаточно и кстати opencv тоже как вариант. это уже готовые модули для подобных задач. распознание чего-то. не важно чего. текста. картинок. видео. чего хочешь. просто нужно правильно пользоваться этим всем. и на подобные темы уже достаточно информации в интернете

GasikPasik

Участник

да, одна капча 0,15р вроде. Есть сервис за капчу 0,05р, не помню название. Можно конечно через openCV, но лишний геморрой.

ГОХА | GoxaShow

bo$$ of th!s gym

pytesseract как один из вариантов. но можно поискать и другие модули какие-нибудь. таких достаточно и кстати opencv тоже как вариант. это уже готовые модули для подобных задач. распознание чего-то. не важно чего. текста. картинок. видео. чего хочешь. просто нужно правильно пользоваться этим всем. и на подобные темы уже достаточно информации в интернете

его лучше не использовать, сколько его не тренируй, он будет мозги ебать, проверенно на личном опыте в 3 недели

GasikPasik

Участник

pytesseract как один из вариантов. но можно поискать и другие модули какие-нибудь. таких достаточно и кстати opencv тоже как вариант. это уже готовые модули для подобных задач. распознание чего-то. не важно чего. текста. картинок. видео. чего хочешь. просто нужно правильно пользоваться этим всем. и на подобные темы уже достаточно информации в интернете


Тыы говоришь, чт ов интернете на подобную тему очень много информации, можешь скинуть ссылок? Допустим pytesseract или OpenCV, правильно пользоваться, в плане создавать нормальные образы и сделать хорошую предобработку скрина? Я уже читаю инфу об это дня 2-3, я буду рад, если поможешь и скажешь, что мнее сейчас делать, чтобы смочь написать код, который хорошо декодирует капчи, эти капчи. Я хочу понять как это делает вообще..

Недавно наша компания запустила новый проект — школу программирования. В рамках этого проекта мы обучаем студентов, детей и взрослых программированию (в частности, на Python).

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

Задача:

Инструменты

Для написания самого скрипта мы будем использовать Python третей версии. Но нам еще нужно имитировать поведение пользователя на сайте — для этого используем Selenium WebDriver.

Приступим

Первая попытка:

Проблема:

Второй способ требует написания небольшого куска кода, но сразу решает нашу задачу.

Для начала нужно при появлении капчи скачать ее на компьютер. Делаем это в два шага:

  1. получаем img капчи по xpath
  2. скачиваем на компьютер.

Как работает ruCaptcha

Сервис ruCaptcha предоставляет программный интерфейс (API), позволяющий интегрировать ваше программное обеспечение с этим сервисом и автоматизировать процесс распознавания изображений и решения капчи.

Процесс распознавания изображений и решения капчи состоит из нескольких простых шагов:

  1. Вы отправляете изображение на сервер ruCaptcha.
  2. Сервер возвращает вам уникальный идентификатор вашей задачи (Captcha ID).
  3. Вы запускаете цикл, который проверяет, выполнена ли задача.
  4. Сервер возвращает вам результат распознавания.

Непосредственный алгоритм разгадывания

1. Получите ваш персональный ключ API в настройках вашего аккаунта.

BASE64_FILE — тело файла капчи в формате base64.

Вы можете указать дополнительные параметры в вашем запросе, чтобы определить, какой тип капчи вы решаете и помочь сервису решить её правильно. Полный список параметров приведен в таблице на сайте сервиса.

Если вы отправили корректный запрос, сервер вернёт ID капчи в виде json,

Если что-то пошло не так, сервер вернёт ошибку. Описание ошибок можно посмотреть здесь.

3. Затем нужно подождать 5-10 секунд и отослать GET-запрос с API_KEY и ID капчи.

Если ваша капча еще не решена, сервер вернет CAPCHA_NOT_READY. В таком случае повторите ваш запрос через 5 секунд.

Если что-то пошло не так, сервер вернёт ошибку, описание которой можно найти на сайте сервиса в главе Обработка ошибок.

Результат:

Потратив 2-4 часа на написание кода, вы можете сэкономить бюджет для набора 5-10 преподавателей. Что мы, собственно, и сделали. Через LinkedIn мы таким образом уже наняли двоих преподавателей по Python и одного по JS (FrontEnd).

Это сто процентов капча так как используя внешний впн TunnelBear - у меня опять ссылки являются рабочими. Но это не очень удобно для меня, как это сделать проще?

Ты не поверишь. но эта капча и сделана против вот таких вот ботов/сканеров/парсеров. гугл, в этом плане, более толерантен.

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

После написания заметки о генераторах фракталов, меня посетила одна идея. В свое время я интересовался автоматическим распознаванием капч (которые captcha). Так вот, распознавание происходит в несколько этапов. Текст капчи отделяются от фона, вычищается от мусора, нарезается на буквы. Затем буквы приводятся к одному размеру и используются для обучения нейронной сети. Притом первый шаг — отделение текста от фона, как правило, является довольно простым.

Давайте посмотрим на некоторые капчи:

Примеры Captcha

Обратите внимание на номера с 4-го по 7-й. Эти капчи достаточно контрастны для того, чтобы преобразовать их в черно-белое изображение (матрицу ноликов и единичек) практически без потери информации. С капчей номер 3 та же проблема, хотя это и менее очевидно. На самом деле она даже слабее остальных капч, потому что позволяет легко разбить изображенное число на цифры.

Вы могли узнать капчу номер 1, она использовалась (до сих пор используется?) Яндексом. И она была успешно взломана без особой магии. Капча номер 2 может показаться надежной, но на самом деле она таковой не является. Капча номер 6 также была взломана.

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

При чем тут фракталы? Как выяснилось, есть такой алгоритм генерации красивых картинок под названием плазма. Алгоритм очень простой. И да, картинка, которую он выдает на выходе — это тоже фрактал.

Иллюстрация к предыдущим двум абзацам:

Алгоритм создания Captcha

Остается доработать кое-какие мелочи (менять смещение, наклон и размер цифр, применить пару фильтров), но идею, надеюсь, вы поняли. Такая капча, конечно, не очень привлекательна в плане юзабилити. Но когда речь заходит о безопасности, всегда приходится искать компромисс.

Плавно переходим от теории к практике. Реализовывал я все это хозяйство на Python. Вот, что получилось:

from PIL import Image , ImageDraw , ImageFont , ImageFilter
from random import random

x_offset = - 10
draw = ImageDraw. Draw ( mask )
for i in range ( len ( secret ) ) :
x_offset + = 20 + int ( random ( ) * 20 )
y_offset = - 10 + int ( random ( ) * 30 )
draw. text ( ( x_offset , y_offset ) , secret [ i ] , font = font )

bg = plazma ( width , height )
fg = plazma ( width , height )
result = Image. composite ( bg , fg , mask )

for xy in [ ( 0 , 0 ) , ( width- 1 , 0 ) , ( 0 , height- 1 ) , ( width- 1 , height- 1 ) ] :
rgb = [ ]
for i in range ( 3 ) :
rgb. append ( int ( random ( ) * 256 ) )
pix [ xy [ 0 ] , xy [ 1 ] ] = ( rgb [ 0 ] , rgb [ 1 ] , rgb [ 2 ] )

plazmaRec ( pix , 0 , 0 , width- 1 , height- 1 )
return img

rgb = [ ]
for i in range ( 3 ) :
rgb. append ( ( pix [ x1 , y1 ] [ i ] + pix [ x1 , y2 ] [ i ] ) / 2 )
rgb. append ( ( pix [ x2 , y1 ] [ i ] + pix [ x2 , y2 ] [ i ] ) / 2 )
rgb. append ( ( pix [ x1 , y1 ] [ i ] + pix [ x2 , y1 ] [ i ] ) / 2 )
rgb. append ( ( pix [ x1 , y2 ] [ i ] + pix [ x2 , y2 ] [ i ] ) / 2 )

tmp = ( pix [ x1 , y1 ] [ i ] + pix [ x1 , y2 ] [ i ] +
pix [ x2 , y1 ] [ i ] + pix [ x2 , y2 ] [ i ] ) / 4
diagonal = ( ( x1-x2 ) ** 2 + ( y1-y2 ) ** 2 ) ** 0.5
while True :
delta = int ( ( ( random ( ) - 0.5 ) / 100 * min ( 100 , diagonal ) ) * 255 )
if ( tmp + delta >= 0 ) and ( tmp + delta 255 ) :
tmp + = delta
break
rgb. append ( tmp )

pix [ x1 , ( y1 + y2 ) / 2 ] = ( rgb [ 0 ] , rgb [ 5 ] , rgb [ 10 ] )
pix [ x2 , ( y1 + y2 ) / 2 ] = ( rgb [ 1 ] , rgb [ 6 ] , rgb [ 11 ] )
pix [ ( x1 + x2 ) / 2 , y1 ] = ( rgb [ 2 ] , rgb [ 7 ] , rgb [ 12 ] )
pix [ ( x1 + x2 ) / 2 , y2 ] = ( rgb [ 3 ] , rgb [ 8 ] , rgb [ 13 ] )
pix [ ( x1 + x2 ) / 2 , ( y1 + y2 ) / 2 ] = ( rgb [ 4 ] , rgb [ 9 ] , rgb [ 14 ] )

plazmaRec ( pix , x1 , y1 , ( x1+x2 ) / 2 , ( y1+y2 ) / 2 )
plazmaRec ( pix , ( x1+x2 ) / 2 , y1 , x2 , ( y1+y2 ) / 2 )
plazmaRec ( pix , x1 , ( y1+y2 ) / 2 , ( x1+x2 ) / 2 , y2 )
plazmaRec ( pix , ( x1+x2 ) / 2 , ( y1+y2 ) / 2 , x2 , y2 )

if __name__ == '__main__' :
result = captcha ( "12345" )
result. save ( "result.jpg" , "PNG" )

Если под Windows интерпретатор будет ругаться по поводу поддержки шрифтов, поставьте PIL отсюда. Капча будет смотреться красивее, если использовать шрифт Comic Sans MS.

Поскольку в PIL нет размытия по Гауссу, выбор пришлось сделать в пользу blur. С другой стороны, а что нам мешает использовать стороннюю реализацию размытия по Гауссу? Вот соответствующая заплатка к скрипту:

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

Фрактальные капчи

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

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