Автор Тема: UDF для работы с API anti-captcha.com  (Прочитано 10666 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн WR-e-D [?]

  • Вредный
  • Новичок
  • *
  • Сообщений: 53
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
UDF для работы с API anti-captcha.com
« Создано: Февраль 17, 2015, 22:32:16 »
AutoIt: 3+
Версия: 1.4

Категория:  Автоматизация, Вспомогательные функции, Интернет, Разное

Описание: Обновленная UDF для работы с сервизом anti-captcha.com

Код/Пример:
(нажмите для показа/скрытия)

Автор(ы): WRed


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
« Последнее редактирование: Февраль 19, 2015, 18:32:03 от WR-e-D »

Русское сообщество AutoIt

UDF для работы с API anti-captcha.com
« Отправлен: Февраль 17, 2015, 22:32:16 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2754
  • Репутация: 464
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: UDF для работы с API anti-captcha.com
« Ответ #1, Отправлен: Февраль 17, 2015, 23:43:03 »
Цитировать
5 разных работников не смогли разгадать капчу
это на каком языке?  :)
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн WR-e-D [?]

  • Вредный
  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: UDF для работы с API anti-captcha.com
« Ответ #2, Отправлен: Февраль 18, 2015, 00:04:40 »
Цитировать
5 разных работников не смогли разгадать капчу
это на каком языке?  :)

Подробнее пожалуйста, откуда это ?

Оффлайн firex [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 943
  • Репутация: 203
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: UDF для работы с API anti-captcha.com
« Ответ #3, Отправлен: Февраль 18, 2015, 00:32:55 »
joiner
File/Encoding/UTF8

Русское сообщество AutoIt

Re: UDF для работы с API anti-captcha.com
« Ответ #3 Отправлен: Февраль 18, 2015, 00:32:55 »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 461
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: UDF для работы с API anti-captcha.com
« Ответ #4, Отправлен: Февраль 18, 2015, 10:49:29 »
WR-e-D
тут забыли выйти из функции,т.к файла нет.
Код: AutoIt [Выделить]
    If Not FileExists($file) Then
        MsgBox(16, 'No CAPTCHA file', $file)
    EndIf
    $fh = FileOpen($file, 16)

Проверьте вам скрипт с этими опциями, найдете еще пару ошибок.
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 4 -w 5 -w 6 -w 7
В UDF не нужно показывать MSGBOX или ToolTip.
PS, не в обиду, но выглядит как наколенная подделка, сделанная за 5 минут.


Оффлайн WR-e-D [?]

  • Вредный
  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: UDF для работы с API anti-captcha.com
« Ответ #5, Отправлен: Февраль 18, 2015, 11:13:50 »
WR-e-D
тут забыли выйти из функции,т.к файла нет.
Код: AutoIt [Выделить]
    If Not FileExists($file) Then
        MsgBox(16, 'No CAPTCHA file', $file)
    EndIf
    $fh = FileOpen($file, 16)

Проверьте вам скрипт с этими опциями, найдете еще пару ошибок.
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 4 -w 5 -w 6 -w 7
В UDF не нужно показывать MSGBOX или ToolTip.
PS, не в обиду, но выглядит как наколенная подделка, сделанная за 5 минут.
Было сделано для себя, так-как не нашел рабочего варианта (нечего было подделывать). Выложил, чтоб кому нибудь сэкономить время. А что не оформлено как UDF простите, опыта в создании UDF не имею. Буду рад коррекциям с вашей стороны.
П.С. Ошибок кстати нет (ну кроми выше указанной), есть ворнинги декларации переменных
P.P.S. Перезалил.

Да и кстати, что за параметр " -w 7" у врапера ?
« Последнее редактирование: Февраль 18, 2015, 11:33:00 от WR-e-D »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 461
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: UDF для работы с API anti-captcha.com
« Ответ #6, Отправлен: Февраль 18, 2015, 12:02:19 »
WR-e-D  [?]
Цитировать
Было сделано для себя, так-как не нашел рабочего варианта
А, ясно тогда.

Если пишите UDF, то даете ей имя. Например AntiCaptcha, и все функции начинаются на _AntiCaptcha
_AntiCaptcha
_AntiCaptcha_HttpPost
_AntiCaptcha_HttpGet
_AntiCaptcha_URLEncode
итп
Так не будет конфликтов с другим UDF.

Но больше вопросов вызывает логика. Особенно 2 цикла подряд.
Код: AutoIt [Выделить]
 Do
..
Until $captcha_id <> @error And @extended <> 1

И посути функция _AntiCaptcha возращает ошибку только в том случае если нет файла.
А если баланс отрицательный, или забанен ИП, или другая причина, вы это вообще не обрабатываете.
Пауза в 10 секунд, тоже странная.
Я вижу алгоритм такой:
Делаете цикл от 1 до 5, конечный, пытаетесь отправить файл. Если файл принят, то только в этом случае переходите ко второму циклу, который будет ждать распознавания.
Если файл не принят, то смотрите почему: Если нет денег, нет доступа, ключ не верный, и тп (критические ошибки), то вообще нет смысла больше отправлять запросы, сразу возвращайте ошибку.
Если же нет слотов, то пауза и цикл заново.

Если в конце файл все таки не удалось отправить, то тоже ошибка.

Второй цикл проще, в течении времени X (обычно 30 сек) получаете статус распознавание.
Если опять критические ошибки, то возвращаете ошибку. Иначе небольшая пауза и повтор.

из _GetInfo я бы убрал проверку на OK, вынес бы ее в другую функцию, тогда _GetInfo возвращала бы только ошибки, причем критические помечаются по особому.

Функцию замените _Base64Encode на эту:
Код: AutoIt [Выделить]
Func __AntiCaptcha_Base64Encode_MS($Binary, $iFlags = 0x40000001)
    $Binary = Binary($Binary)
    Local $tByteArray = DllStructCreate('byte[' & BinaryLen($Binary) & ']')
    DllStructSetData($tByteArray, 1, $Binary)
    Local $aSize = DllCall("Crypt32.dll", "bool", 'CryptBinaryToString', 'struct*', $tByteArray, 'dword', BinaryLen($Binary), 'dword', $iFlags, 'str', Null, 'dword*', Null)
    Local $tOutput = DllStructCreate('char[' & $aSize[5] & ']')
    Local $aEncode = DllCall("Crypt32.dll", "bool", 'CryptBinaryToString', 'struct*', $tByteArray, 'dword', $aSize[2], 'dword', $iFlags, 'struct*', $tOutput, 'dword*', $aSize[5])
    If @error Or (Not $aEncode[0]) Then Return SetError(1, 0, 0)
    Return DllStructGetData($tOutput, 1)
EndFunc   ;==>_Base64Encode_MS



Добавлено: Февраль 18, 2015, 12:12:56
Судя по API вообще нет смысла много раз отправлять файл, 1 раза достаточно, если файл не принят, то и не нужно отправлять его еще раз и так ясно, что проблема с файлом.
« Последнее редактирование: Февраль 18, 2015, 12:12:56 от inververs, Причина: Объединение сообщений »

Оффлайн WR-e-D [?]

  • Вредный
  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: UDF для работы с API anti-captcha.com
« Ответ #7, Отправлен: Февраль 18, 2015, 14:28:52 »


Добавлено: Февраль 18, 2015, 12:12:56
Судя по API вообще нет смысла много раз отправлять файл, 1 раза достаточно, если файл не принят, то и не нужно отправлять его еще раз и так ясно, что проблема с файлом.
Вот новый АПИ (возможно они отличаются)
Первый цикл нужен для ответа "ERROR_NO_SLOT_AVAILABLE" судя по апи, капча в данном случае не принята.
Щяс все переделаю и залью. Спасибо за советы.


Добавлено: Февраль 18, 2015, 17:35:35
WR-e-D  [?]
Цитировать
Было сделано для себя, так-как не нашел рабочего варианта
А, ясно тогда.

Если пишите UDF, то даете ей имя. Например AntiCaptcha, и все функции начинаются на _AntiCaptcha
_AntiCaptcha
_AntiCaptcha_HttpPost
_AntiCaptcha_HttpGet
_AntiCaptcha_URLEncode
итп
Так не будет конфликтов с другим UDF.

Но больше вопросов вызывает логика. Особенно 2 цикла подряд.
Код: AutoIt [Выделить]
 Do
..
Until $captcha_id <> @error And @extended <> 1

И посути функция _AntiCaptcha возращает ошибку только в том случае если нет файла.
А если баланс отрицательный, или забанен ИП, или другая причина, вы это вообще не обрабатываете.
Пауза в 10 секунд, тоже странная.
Я вижу алгоритм такой:
Делаете цикл от 1 до 5, конечный, пытаетесь отправить файл. Если файл принят, то только в этом случае переходите ко второму циклу, который будет ждать распознавания.
Если файл не принят, то смотрите почему: Если нет денег, нет доступа, ключ не верный, и тп (критические ошибки), то вообще нет смысла больше отправлять запросы, сразу возвращайте ошибку.
Если же нет слотов, то пауза и цикл заново.

Если в конце файл все таки не удалось отправить, то тоже ошибка.

Второй цикл проще, в течении времени X (обычно 30 сек) получаете статус распознавание.
Если опять критические ошибки, то возвращаете ошибку. Иначе небольшая пауза и повтор.

из _GetInfo я бы убрал проверку на OK, вынес бы ее в другую функцию, тогда _GetInfo возвращала бы только ошибки, причем критические помечаются по особому.

Функцию замените _Base64Encode на эту:
Код: AutoIt [Выделить]
Func __AntiCaptcha_Base64Encode_MS($Binary, $iFlags = 0x40000001)
    $Binary = Binary($Binary)
    Local $tByteArray = DllStructCreate('byte[' & BinaryLen($Binary) & ']')
    DllStructSetData($tByteArray, 1, $Binary)
    Local $aSize = DllCall("Crypt32.dll", "bool", 'CryptBinaryToString', 'struct*', $tByteArray, 'dword', BinaryLen($Binary), 'dword', $iFlags, 'str', Null, 'dword*', Null)
    Local $tOutput = DllStructCreate('char[' & $aSize[5] & ']')
    Local $aEncode = DllCall("Crypt32.dll", "bool", 'CryptBinaryToString', 'struct*', $tByteArray, 'dword', $aSize[2], 'dword', $iFlags, 'struct*', $tOutput, 'dword*', $aSize[5])
    If @error Or (Not $aEncode[0]) Then Return SetError(1, 0, 0)
    Return DllStructGetData($tOutput, 1)
EndFunc   ;==>_Base64Encode_MS



Добавлено: Февраль 18, 2015, 12:12:56
Судя по API вообще нет смысла много раз отправлять файл, 1 раза достаточно, если файл не принят, то и не нужно отправлять его еще раз и так ясно, что проблема с файлом.
Обновил: Жду вашего мнения )
« Последнее редактирование: Февраль 18, 2015, 17:35:56 от WR-e-D, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: UDF для работы с API anti-captcha.com
« Ответ #7 Отправлен: Февраль 18, 2015, 14:28:52 »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 461
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: UDF для работы с API anti-captcha.com
« Ответ #8, Отправлен: Февраль 19, 2015, 10:07:53 »
Уже лучше  :ok: Осталось возвращаемые коды ошибок пересчитать, что бы не дублировались.
Например: ошибка 1 - это нет файла, ошибка 2 - не удалось отправить файл, 3 - капча не разгадана.
И функцию __AntiCaptcha переименовать в _AntiCaptcha
Ну еще можно ключ проверять, что бы он был 32 в длину.
Вроде всё. Молодец.


Добавлено: Февраль 19, 2015, 10:10:55
И функция __AntiCaptcha_URLEncode должна быть такой: (в своей вы забыли пару символов)
Код: AutoIt [Выделить]
Func __AntiCaptcha_URLEncode($sData)
    Local $aData = StringToASCIIArray($sData, Default, Default, 2)
    Local $sOut
    For $i = 0 To UBound($aData) - 1
        Switch $aData[$i]
            Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
                $sOut &= Chr($aData[$i])
            Case 32
                $sOut &= "+"
            Case Else
                $sOut &= "%" & Hex($aData[$i], 2)
        EndSwitch
    Next
    Return $sOut
EndFunc
 


Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: UDF для работы с API anti-captcha.com
« Ответ #9, Отправлен: Февраль 19, 2015, 11:27:50 »
WR-e-D,
ПредупреждениеЗа нарушение общих правил (пункт В.2):
Цитировать
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.

Оффлайн WR-e-D [?]

  • Вредный
  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: UDF для работы с API anti-captcha.com
« Ответ #10, Отправлен: Февраль 19, 2015, 18:31:28 »
Обновил

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1419
  • Репутация: 177
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: UDF для работы с API anti-captcha.com
« Ответ #11, Отправлен: Февраль 20, 2015, 21:24:29 »
Цитировать
5 разных работников не смогли разгадать капчу
это на каком языке?  :)
Это в переводе из кодировки CP1251 в UTF-8 будет:
Цитировать
5 разных работников не смогли разгадать капчу

А про UDF, Сейчас я пользуюсь вот этой: API функции для работы с antigate.com и у меня работает.
P.S. anti-captcha.com и antigate.com это один и тот же сервис (логин, пароль и ключ можно использовать одинаковый и там и там). Подробнее в новостях или на скрине.

Оффлайн Nervill [?]

  • Новичок
  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: UDF для работы с API anti-captcha.com
« Ответ #12, Отправлен: Август 31, 2015, 23:33:11 »
Спасибо братух за проделанную работу! Добавил доп параметры, теперь можно распознавать ReCaptcha V.2 (выберите что-то на картинках) :IL_AutoIt_1:

Оффлайн bescom [?]

  • Новичок
  • *
  • Сообщений: 61
  • Репутация: 0
  • Пол: Мужской
    • Блог Спасателя
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: UDF для работы с API anti-captcha.com
« Ответ #13, Отправлен: Декабрь 13, 2015, 11:06:16 »
Добавил доп параметры, теперь можно распознавать ReCaptcha V.2 (выберите что-то на картинках) :IL_AutoIt_1:
То ли сегодня 13-е число влияет, то ли я с утра торможу... Но вот никак я не могу сообразить, как добавить эти дополнительные параметры... Сделал вот так:
Код: AutoIt [Выделить]
#include <Captcha.au3>
$text="Выберите все изображения, где есть водопады."
$Resp = _AntiCaptcha("KEY", @ScriptDir & "/img.png", False, 0, 0, 0, 0, 4, 10, 1, 1, "comment="&$text&"&type=recaptcha2")
MsgBox(0, "Responce", $Resp)

Ответ неизменно - UNDEFINED. Очень прошу - ткните носом, что и где неправильно делаю, а то нужно распознавание reCaptcha2, а меня переклинило...

Оффлайн IgorFIN [?]

  • Новичок
  • *
  • Сообщений: 4
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: UDF для работы с API anti-captcha.com
« Ответ #14, Отправлен: Март 26, 2018, 12:44:51 »
Кто нибудь сталкивался с этой ошибкой? Как обойти...
Заранее благодарю

Line 116  (File "C:\Captcha.au3"):

$oHTTP.Send($sData)
$oHTTP^ ERROR

Error: The requested action with this object has failed.


Русское сообщество AutoIt

Re: UDF для работы с API anti-captcha.com
« Ответ #14 Отправлен: Март 26, 2018, 12:44:51 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
16 Ответов
12790 Просмотров
Последний ответ Май 24, 2015, 00:16:05
от WSWR
100 Ответов
126609 Просмотров
Последний ответ Сентябрь 01, 2018, 03:21:14
от Kirilopak
0 Ответов
1435 Просмотров
Последний ответ Апрель 26, 2015, 15:19:08
от madmasles
7 Ответов
7549 Просмотров
Последний ответ Май 29, 2018, 02:07:28
от WSWR
2 Ответов
2307 Просмотров
Последний ответ Октябрь 20, 2015, 00:12:08
от Pavel
3 Ответов
1389 Просмотров
Последний ответ Январь 21, 2018, 02:43:27
от Pavel
2 Ответов
940 Просмотров
Последний ответ Июнь 27, 2017, 23:46:42
от Vovsla
0 Ответов
256 Просмотров
Последний ответ Январь 10, 2018, 01:25:08
от betauto
1 Ответов
409 Просмотров
Последний ответ Январь 10, 2018, 01:43:45
от WSWR
0 Ответов
376 Просмотров
Последний ответ Январь 11, 2018, 23:23:19
от Vovsla