Распознавание капчи с помощью antigate в Human Emulator
В программе Human Emulator помимо того что есть возможность распознавать капчи в ручную или с использованием встроенных алгоритмов можно использовать специальные сервисы распознавания.
Одним из таких сервисов автоматического распознавания капчи является сервис Antigate. (http://antigate.com и https://anti-captcha.com ).
Функционал Human Emulator для работы с сервисом Antigate.
Так как функционал для работы с сервисом был добавлен ещё в программу в первых версиях, то с течением времени он только дополнялся.
На данный момент с сервисом можно работать несколькими способами: через функцию $image->recognize_by_anticaptcha и через объекты anticaptcha и anticaptcha2.
Работа через функцию позволяет просто разгадывать различные капчи, в то время как при работе через объекты вам доступны такие функции как проверка баланса, получение последнего результата распознания капчи, решение капч Google Recaptcha с обходом «защиты» JS и т.д.
Функция recognize_by_anticaptcha.
Для того что бы с помощью этой функции разгадывать разные капчи используются различные параметры.
- $url – это урл картинки если задан пустой (“”) то картинка берётся из указанного файла
- $file – файл с картинкой, в зависимости от значения параметра $url, используется как хранилище или источник картинки
- $key – ключ(идентификатор) пользователя в сервисе Antigate
- $path – задаём путь к серверу
- $is_verbose – отражать в окне отладки процесс распознания капчи
- $rtimeout – задержка между опросами статуса капчи
- $mtimeout – время ожидания ввода капчи
- $is_phrase – 0 либо 1 – флаг “в капче 2 и более слов”
- $is_regsense – 0 либо 1 – флаг “регистр букв в капче имеет значение”
- $is_numeric – 0 либо 1 – флаг “капча состоит только из цифр”
- $min_len – 0 (без ограничений), любая другая цифра указывает минимальную длину текста капчи
- $max_len – 0 (без ограничений), любая другая цифра указывает максимальную длину текста капчи
- $frame – -1 — номер фрейма с картинкой
- $is_russian – 0 либо 1 — для распознания русскоязычными пользователями.
Параметры $is_phrase, $is_regsense, $is_numeric,$is_russian используются для определения типа распознаваемой капчи.
Так например для распознавания обычной капчи, у которой url(src) на странице содержит images/captcha и состоящую из английских букв и простых цифр нужно вызвать функцию в виде:
1 2 |
// распознать капчу $captcha = $image->recognize_by_anticaptcha("images/captcha","c:\\1.jpg",'ee18bf37e641c9d53c58c332b565eb62'); |
когда в капче 2 и более слов:
1 2 |
// распознать капчу $captcha = $image->recognize_by_anticaptcha("images/captcha","c:\\1.jpg",'ee18bf37e641c9d53c58c332b565eb62',"http://antigate.com",true,5,120,1); |
когда в капче используются большие и маленькие символы (регистрозависимые капчи):
1 2 |
// распознать капчу $captcha = $image->recognize_by_anticaptcha("images/captcha","c:\\1.jpg",'ee18bf37e641c9d53c58c332b565eb62',"http://antigate.com",true,5,120,0,1); |
когда капча содержит только цифры:
1 2 |
// распознать капчу $captcha = $image->recognize_by_anticaptcha("images/captcha","c:\\1.jpg",'ee18bf37e641c9d53c58c332b565eb62',"http://antigate.com",true,5,120,0,1); |
когда капча состоит из русских символов:
1 2 |
// распознать капчу $captcha = $image->recognize_by_anticaptcha("images/captcha","c:\\1.jpg",'ee18bf37e641c9d53c58c332b565eb62',"http://antigate.com",true,5,120,0,0,0,0,0,-1,1); |
когда капча состоит из 2 и более слов с русскими символами:
1 2 |
// распознать капчу $captcha = $image->recognize_by_anticaptcha("images/captcha","c:\\1.jpg",'ee18bf37e641c9d53c58c332b565eb62',"http://antigate.com",true,5,120,1,0,0,0,0,-1,1); |
Объект anticaptcha.
Данный объект содержит функционал, позволяющий воспользоваться API v1 antigate.com для распознования капч. Это непосредственно как само распознавание капч, так и получение последних результатов распознавания, а также методы, позволяющие указывать на ошибочное распознавание капч.
Объект содержит следующие функции:
- recognize – распознать капчу из заданной картинки на диске
- recognize_image — распознать капчу из заданной картинки на диске
- get_last_capcha_result – получить последний результат распознания капчи
- get_last_capcha_filename – получить имя последнего распознанного файла с капчей
- get_last_capcha_id – получить идентификатор последней распознанной капчи
- get_last_capcha_error – получить ошибку последней распознанной капчи
- report_bug_capcha – пожаловаться что капча не распознана
Непосредственно для распознавания используется функция recognize. Эта функция на вход принимает параметры:
- $filename – путь к файлу с капчей
- $apikey – ключ для идентификации на сервисе
- $path – путь к сервису
- $is_verbose — включить/выключить verbose mode (комментирование происходящего): false(выключить), true(включить)
- $rtimeout — задержка между опросами статуса капчи
- $mtimeout — время ожидания ввода капчи
- $is_phrase — 0 либо 1 — флаг «в капче 2 и более слов»
- $is_regsense — 0 либо 1 — флаг «регистр букв в капче имеет значение»
- $is_numeric — 0 либо 1 — флаг «капча состоит только из цифр»
- $min_len — 0 (без ограничений), любая другая цифра указывает минимальную длину текста капчи
- $max_len — 0 (без ограничений), любая другая цифра указывает максимальную длину текста капчи
- $is_russian — 0 либо 1 — флаг «капча должна демонстрироваться только русскоязычным работникам»
То есть теперь перед тем как вызывать эту функцию вам надо сохранить файл на локальных диск.
Пример использования для распознавания обычной капчи, состоящей из английских букв и простых цифр :
1 2 3 4 |
// сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","images/captcha",false)." "; // распознать капчу $captcha = $anticapcha->recognize($debug->get_cur_script_folder()."tmp\\1.jpg","ee18bf37e641c9d53c58c332b565eb62"); |
когда в капче 2 и более слов:
1 2 3 4 |
// сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","images/captcha",false)." "; // распознать капчу $captcha = $anticapcha->recognize($debug->get_cur_script_folder()."tmp\\1.jpg","ee18bf37e641c9d53c58c332b565eb62",'http://www.anti-captcha.com', true, 5, 120, 1); |
когда в капче используются большие и маленькие символы (регистрозависимые капчи):
1 2 3 4 |
// сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","images/captcha",false)." "; // распознать капчу $captcha = $anticapcha->recognize($debug->get_cur_script_folder()."tmp\\1.jpg",$anticapcha->api_key,"http://www.anti-captcha.com",true,5,120,0,1); |
когда капча содержит только цифры:
1 2 3 4 |
// сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","images/captcha",false)." "; // распознать капчу $captcha = $anticapcha->recognize($debug->get_cur_script_folder()."tmp\\1.jpg",$anticapcha->api_key,"http://www.anti-captcha.com",true,5,120,0,0,1); |
когда капча содержит русские символы:
1 2 3 4 |
// сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","images/captcha",false)." "; // распознать капчу $captcha = $anticapcha->recognize($debug->get_cur_script_folder()."tmp\\1.jpg",$anticapcha->api_key,"http://www.anti-captcha.com",true,5,120,0,0,0,0,0,1); |
когда капча содержит русские символы и состоит из 2 и более слов:
1 2 3 4 |
// сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","images/captcha",false)." "; // распознать капчу $captcha = $anticapcha->recognize($debug->get_cur_script_folder()."tmp\\1.jpg",$anticapcha->api_key,"http://www.anti-captcha.com",true,5,120,1,0,0,0,0,1); |
Функция anticapcha->recognize_image аналогична функции anticapcha->recognize за тем лишь исключением, что тип капчи и ключ задаются через специальные параметры, которые соответствуют параметрам функции anticapcha->recognize. Так для распознавания обычной капчи с английскими символами нужно вызывать функцию следующим образом:
1 2 3 4 5 6 |
// API ключ $anticapcha->api_key="ee18bf37e641c9d53c58c332b565eb62"; // сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","captcha.jpg",false)." "; // распознать капчу $captcha = $anticapcha->recognize_image($debug->get_cur_script_folder()."tmp\\1.jpg"); |
когда в капче 2 и более слов:
1 2 3 4 5 6 7 8 |
// API ключ $anticapcha->api_key="ee18bf37e641c9d53c58c332b565eb62"; // в капче 2 и более слов $anticapcha->is_phrase=1; // сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","captcha.jpg",false)." "; // распознать капчу $captcha = $anticapcha->recognize_image($debug->get_cur_script_folder()."tmp\\1.jpg"); |
когда в капче используются большие и маленькие символы (регистрозависимые капчи):
1 2 3 4 5 6 7 8 |
// API ключ $anticapcha->api_key="ee18bf37e641c9d53c58c332b565eb62"; // регистрозависимые капчи $anticapcha->is_regsense=1; // сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","captcha.jpg",false)." "; // распознать капчу $captcha = $anticapcha->recognize_image($debug->get_cur_script_folder()."tmp\\1.jpg"); |
когда капча содержит только цифры:
1 2 3 4 5 6 7 8 9 10 11 |
// API ключ $anticapcha->api_key="ee18bf37e641c9d53c58c332b565eb62"; // только цифры // 0 - нет требований // 1 - можно вводить только цифры // 2 - вводить можно любые символы кроме цифр $anticapcha->is_numeric=1; // сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","captcha.jpg",false)." "; // распознать капчу $captcha = $anticapcha->recognize_image($debug->get_cur_script_folder()."tmp\\1.jpg"); |
когда капча содержит русские символы:
1 2 3 4 5 6 7 8 |
// API ключ $anticapcha->api_key="ee18bf37e641c9d53c58c332b565eb62"; // русские символы $anticapcha->language=1; // сохранить капчу на диск $image->screenshot_by_src("tmp/1.jpg","captcha.jpg",false)." "; // распознать капчу $captcha = $anticapcha->recognize_image($debug->get_cur_script_folder()."tmp\\1.jpg"); |
Остальные комбинации как например: русская капча из двух и более слов регистрозависимая, осуществляется установкой соответствующих параметров: language, is_phrase, is_regsense и т.д.
Остальные функции объекта anticapcha служат для получения различной информации с сервиса. И в документации по этому объекту можно найти к ним подробные примеры.
Объект anticaptcha2.
Содержит функционал, который стал доступен с появлением API v2. Основным нововведением стало решение рекапчи Гугла. Также изменился сам процесс работы с сервисом. Появились методы createTask — создает задачу на решение выбранного типа капчи и getTaskResult — получить результат задачи. Вокруг этих в двух методов и строится работа с сервисом.
ImageToTextTask — решение обычной капчи с текстом.
Пример использования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$api = new ImageToText(); $api->setVerboseMode(true); //your anti-captcha.com account key $api->setKey("ee18bf37e641c9d53c58c332b565eb62"); //setting file $api->setFile("1.jpg"); if (!$api->createTask()) { $api->debout("API v2 send failed - ".$api->getErrorMessage(), "red"); return false; } $taskId = $api->getTaskId(); if (!$api->waitForResult()) { $api->debout("could not solve captcha", "red"); $api->debout($api->getErrorMessage()); } else { echo "\nhash result: ".$captcha = $api->getTaskSolution()."\n\n"; } |
Как и до этого типы капчи задаются с помощью параметров:
- phrase (true, false) — два и более слов, true — работник должен ввести текст с одним или несколькими пробелами.
- case (true, false)- регистрозависимые, true — работник увидит специальный сигнал что ответ необходимо вводить с учетом регистра.
- numeric (0, 1, 2) — цифры, 1 — можно вводить только цифры, 2 — вводить можно любые символы кроме цифр.
- math (true, false) — математическое выражение,true — работник увидит специальный сигнал что на капче изображено математическое выражение.
Пример работы с установкой параметров:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$api = new ImageToText(); $api->setVerboseMode(true); //your anti-captcha.com account key $api->setKey("ee18bf37e641c9d53c58c332b565eb62"); // setting file $api->setFile("1.jpg"); // ввести текст с одним или несколькими пробелами $api->setPhraseFlag(true); // ответ необходимо вводить с учетом регистра $api->setCaseFlag(true); // вводить только цифры $api->setNumericFlag(1); // на капче изображено математическое выражение $api->setMathFlag(true); if (!$api->createTask()) { $api->debout("API v2 send failed - ".$api->getErrorMessage(), "red"); return false; } $taskId = $api->getTaskId(); if (!$api->waitForResult()) { $api->debout("could not solve captcha", "red"); $api->debout($api->getErrorMessage()); } else { echo "\nhash result: ".$captcha = $api->getTaskSolution()."\n\n"; } |
NoCaptchaTask — решение капчи Google и NoCaptchaTaskProxyless — решение капчи Google без прокси.
Эти методы отличаются только использованием прокси.
Пример использования NoCaptchaProxyless для VK:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
$api = new NoCaptchaProxyless(); $api->setVerboseMode(true); // задаём ключ антикапчи $api->setKey("ee18bf37e641c9d53c58c332b565eb62"); // урл где находится капча // в случае с vk указываем страницу на которой отображается капча // в вашем скрипте это $api->setWebsiteURL("https://vk.com/friends"); // из документации Находим в коде тег с параметром sitekey: // <div class="g-recaptcha" data-sitekey="6Lc_aCMTAAAAABx7u2W0WPXnVbI_v6ZdbM6rYf16"></div> // тут есть один нюанс данный ключ может быть не только в этом тэге но и например в конструкиции //src="/recaptcha/api2/bframe?hl=ru&v=v1531759913576&k=6Le00B8TAAAAACHiybbHy8tMOiJhM5vh88JVtP4c&cb=ut68rfevwghy#bcoy17j90g2u" // то есть его можно взять и отсюда из любого src который имеет отношение к рекапче $api->setWebsiteKey("6Le00B8TAAAAACHiybbHy8tMOiJhM5vh88JVtP4c"); // а далее делаем всё как в примере на антикапче if (!$api->createTask()) { $api->debout("API v2 send failed - ".$api->getErrorMessage(), "red"); return false; } $taskId = $api->getTaskId(); if (!$api->waitForResult()) { $api->debout("could not solve captcha", "red"); $api->debout($api->getErrorMessage()); } else { $result = $api->getTaskSolution(); echo "\nhash result: ".$result."\n\n";} // полученный результат отправляем в нужное поле $hiddeninput->set_value_by_attribute("id", "recaptcha-token", false,$result,4); sleep(1); // в вк для того что бы вызвать проверку поля просто делаем обновление страницы // тогда наша распознавание срабатывает // определить очень просто - если после обновления сразу при нажатии // на добавить в друзья опять будет рекапча значит не сработало // в противном случае вы добавите ещё несколько друзей и только потом увидите рекапчу $browser->refresh(); |
Обсудить данный пример и скачать рабочий скрипт добавления в друзья можно у нас на форуме.
Пример использования NoCaptchaTask:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$api = new NoCaptcha(); $api->setVerboseMode(true); // ваш ключ anti-captcha.com $api->setKey("ee18bf37e641c9d53c58c332b565eb62"); // ключ recaptcha с целевого сайта $api->setWebsiteURL("http://http.myjino.ru/recaptcha/test-get.php"); $api->setWebsiteKey("6Lc_aCMTAAAAABx7u2W0WPXnVbI_v6ZdbM6rYf16"); // параметры прокси $api->setProxyType("http"); $api->setProxyAddress("2a01:2f8:121:11c6::2"); $api->setProxyPort(9191); $api->setProxyLogin("thelogin"); $api->setProxyPassword("thepassword"); // задаём User Agent $api->setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116"); // при необходимости можем задать куки // $api->setCookies($Cookies); if (!$api->createTask()) { $api->debout("API v2 send failed - ".$api->getErrorMessage(), "red"); return false; } $taskId = $api->getTaskId(); if (!$api->waitForResult()) { $api->debout("could not solve captcha", "red"); $api->debout($api->getErrorMessage()); } else { echo "\nhash result: ".$captcha = $api->getTaskSolution()."\n\n"; } |
Аналогично как и в $anticaptcha в объекте $anticaptcha2 есть функции для получения различной информации. Пример вывода информации в панель отладки:
1 2 3 4 5 6 7 8 |
// отладочный режим $anticaptcha2->setVerboseMode(true); // ключ $anticaptcha2->setKey("d0de94c74f6d54befe1aa9cc2482d39d"); echo "3. Выведем информацию : "; echo $anticaptcha2->get_last_capcha_filename()." "; echo $anticaptcha2->get_last_capcha_id()." "; echo $anticaptcha2->get_last_capcha_result()."<br>"; |
Про типы решаемых капч с помощью сервиса anticaptcha можно прочитать подробно у них в документации.
Как видно из статьи пользователи Human Emulator имеют широкий выбор функционала для работы с сервисом распознавания капч anti-captcha.com. Более того вы можете самостоятельно добавлять любой нужный вам функционал, используя PHP API сервиса.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.