Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
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 минут.
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. Перезалил.
Но больше вопросов вызывает логика. Особенно 2 цикла подряд.
Код:
Do
..
Until $captcha_id <> @error And @extended <> 1
И посути функция _AntiCaptcha возращает ошибку только в том случае если нет файла.
А если баланс отрицательный, или забанен ИП, или другая причина, вы это вообще не обрабатываете.
Пауза в 10 секунд, тоже странная.
Я вижу алгоритм такой:
Делаете цикл от 1 до 5, конечный, пытаетесь отправить файл. Если файл принят, то только в этом случае переходите ко второму циклу, который будет ждать распознавания.
Если файл не принят, то смотрите почему: Если нет денег, нет доступа, ключ не верный, и тп (критические ошибки), то вообще нет смысла больше отправлять запросы, сразу возвращайте ошибку.
Если же нет слотов, то пауза и цикл заново.
Если в конце файл все таки не удалось отправить, то тоже ошибка.
Второй цикл проще, в течении времени X (обычно 30 сек) получаете статус распознавание.
Если опять критические ошибки, то возвращаете ошибку. Иначе небольшая пауза и повтор.
из _GetInfo я бы убрал проверку на OK, вынес бы ее в другую функцию, тогда _GetInfo возвращала бы только ошибки, причем критические помечаются по особому.
Судя по API вообще нет смысла много раз отправлять файл, 1 раза достаточно, если файл не принят, то и не нужно отправлять его еще раз и так ясно, что проблема с файлом.
Судя по API вообще нет смысла много раз отправлять файл, 1 раза достаточно, если файл не принят, то и не нужно отправлять его еще раз и так ясно, что проблема с файлом.
Вот новый АПИ (возможно они отличаются)
Первый цикл нужен для ответа "ERROR_NO_SLOT_AVAILABLE" судя по апи, капча в данном случае не принята.
Щяс все переделаю и залью. Спасибо за советы.
Но больше вопросов вызывает логика. Особенно 2 цикла подряд.
Код:
Do
..
Until $captcha_id <> @error And @extended <> 1
И посути функция _AntiCaptcha возращает ошибку только в том случае если нет файла.
А если баланс отрицательный, или забанен ИП, или другая причина, вы это вообще не обрабатываете.
Пауза в 10 секунд, тоже странная.
Я вижу алгоритм такой:
Делаете цикл от 1 до 5, конечный, пытаетесь отправить файл. Если файл принят, то только в этом случае переходите ко второму циклу, который будет ждать распознавания.
Если файл не принят, то смотрите почему: Если нет денег, нет доступа, ключ не верный, и тп (критические ошибки), то вообще нет смысла больше отправлять запросы, сразу возвращайте ошибку.
Если же нет слотов, то пауза и цикл заново.
Если в конце файл все таки не удалось отправить, то тоже ошибка.
Второй цикл проще, в течении времени X (обычно 30 сек) получаете статус распознавание.
Если опять критические ошибки, то возвращаете ошибку. Иначе небольшая пауза и повтор.
из _GetInfo я бы убрал проверку на OK, вынес бы ее в другую функцию, тогда _GetInfo возвращала бы только ошибки, причем критические помечаются по особому.
Судя по API вообще нет смысла много раз отправлять файл, 1 раза достаточно, если файл не принят, то и не нужно отправлять его еще раз и так ясно, что проблема с файлом.
Уже лучше Осталось возвращаемые коды ошибок пересчитать, что бы не дублировались.
Например: ошибка 1 - это нет файла, ошибка 2 - не удалось отправить файл, 3 - капча не разгадана.
И функцию __AntiCaptcha переименовать в _AntiCaptcha
Ну еще можно ключ проверять, что бы он был 32 в длину.
Вроде всё. Молодец.
Добавлено:
Сообщение автоматически объединено:
И функция __AntiCaptcha_URLEncode должна быть такой: (в своей вы забыли пару символов)
Код:
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
А про UDF, Сейчас я пользуюсь вот этой: API функции для работы с antigate.com и у меня работает.
P.S. anti-captcha.com и antigate.com это один и тот же сервис (логин, пароль и ключ можно использовать одинаковый и там и там). Подробнее в новостях или на скрине.
То ли сегодня 13-е число влияет, то ли я с утра торможу... Но вот никак я не могу сообразить, как добавить эти дополнительные параметры... Сделал вот так:
Код:
#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, а меня переклинило...