Разгадываем капчу через С# сниппет. Помогите отловить ошибку

ipetrov

Client
Регистрация
21.02.2014
Сообщения
20
Благодарностей
9
Баллы
3
Работаю с соц. сетью через их API и post запросы. Т.к. с С# дружу плохо, написал шаблон в ProjectMaker, чтобы увеличить производительность выключил браузер.

Все вроде бы прекрасно, но после N количество операций, в ответе прилетает капча и тут я голову уже сломал.

Использовать обычный "кубик" модуля антикапчи не могу, т.к. не получается подсунуть картинку из переменной (браузер не используем).

Сделал так:
  1. Get запросом сохраняем картинку (с пометкой "сохранить как файл")
  2. C# сниппетом
    1. Конвертируем картинку в Base64
    2. Отправляем на распознавание через ZennoPoster.CaptchaRecognition
Используя MonkeyEnter.dll - все хорошо, вижу картинку, ввожу ответ, получаю правильный ответ

Включаю Anti-Captcha.dll - в ответ приходит "vqqeu-|-http://AntiGate.com/res.php?key=мойКлюч&action=reportbad&id=161747680

Код сниппета:
Код:
//Отправка капчи из картинки

var captcha__get = project.Variables["captcha__get"].Value;
var image = System.Drawing.Image.FromFile(@captcha__get);
  
string base64String = String.Empty;
  
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    byte[] imageBytes = ms.ToArray();
      
    base64String = Convert.ToBase64String(imageBytes);
}

var result = ZennoPoster.CaptchaRecognition("Anti-Captcha.dll", base64String, "");

return result;
Ребята, помогайте, у меня уже психоз
 

Jerard

Client
Регистрация
11.04.2013
Сообщения
506
Благодарностей
225
Баллы
43
Чъё API? Не ВК случаем?
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113

silent

Client
Регистрация
05.04.2014
Сообщения
237
Благодарностей
85
Баллы
28
lol, ну так шли напрямую пост запросом на антикапчу без использования модуля zp
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113

  1. Код:
    try
    {
    AntiCaptcha anticap =newAntiCaptcha("СЕКРЕТНЫЙ_КЛЮЧ");
    // Отправляем изображение captcha.png и ждем решения капчи
    string answer = anticap.GetAnswer("./captcha.png");
    if(answer !=null)
    Console.WriteLine("Ответ: {0}", answer);
    }
    catch(AntigateErrorException aee)
    {
    // Antigate ответил одной из документированных в API ошибкой
    Console.WriteLine("Ошибка Antigate: {0}", aee.Message);
    }
    catch(Exception e){}// исключение иного рода
 
  • Спасибо
Реакции: SilverSun

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 285
Благодарностей
2 731
Баллы
113
Работаю с соц. сетью через их API и post запросы. Т.к. с С# дружу плохо, написал шаблон в ProjectMaker, чтобы увеличить производительность выключил браузер.

Все вроде бы прекрасно, но после N количество операций, в ответе прилетает капча и тут я голову уже сломал.

Использовать обычный "кубик" модуля антикапчи не могу, т.к. не получается подсунуть картинку из переменной (браузер не используем).

Сделал так:
  1. Get запросом сохраняем картинку (с пометкой "сохранить как файл")
  2. C# сниппетом
    1. Конвертируем картинку в Base64
    2. Отправляем на распознавание через ZennoPoster.CaptchaRecognition
Используя MonkeyEnter.dll - все хорошо, вижу картинку, ввожу ответ, получаю правильный ответ

Включаю Anti-Captcha.dll - в ответ приходит "vqqeu-|-http://AntiGate.com/res.php?key=мойКлюч&action=reportbad&id=161747680

Код сниппета:
C#:
//Отправка капчи из картинки

var captcha__get = project.Variables["captcha__get"].Value;
var image = System.Drawing.Image.FromFile(@captcha__get);

string base64String = String.Empty;

using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    byte[] imageBytes = ms.ToArray();
  
    base64String = Convert.ToBase64String(imageBytes);
}

var result = ZennoPoster.CaptchaRecognition("Anti-Captcha.dll", base64String, "");

return result;
Ребята, помогайте, у меня уже психоз
так вы все правильно делаете, модуль антикапчи возвращает ответ капчи, потом -|- потом жалобный url, если капча неправильно разгадана ( ответ-> vqqeu-|-http://AntiGate.com/res.php?key=мойКлюч&action=reportbad&id=161747680 <- url для жалобы)

Вот как исправить надо
C#:
//Отправка капчи из картинки

var captcha__get = project.Variables["captcha__get"].Value;
var image = System.Drawing.Image.FromFile(@captcha__get);

string base64String = String.Empty;

using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    byte[] imageBytes = ms.ToArray();
  
    base64String = Convert.ToBase64String(imageBytes);
}

var result = ZennoPoster.CaptchaRecognition("Anti-Captcha.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;
 
Последнее редактирование:

ipetrov

Client
Регистрация
21.02.2014
Сообщения
20
Благодарностей
9
Баллы
3
Друзья, всем большое спасибо! Все заработало!
 

ipetrov

Client
Регистрация
21.02.2014
Сообщения
20
Благодарностей
9
Баллы
3

iDnx

Client
Регистрация
06.06.2013
Сообщения
134
Благодарностей
108
Баллы
43
Подскажите как срисовать капчу из переменной дабы избавится от ее сохранения?
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Если я не ошибаюсь пример от darkdiver как раз реализует то что вам нужно
 

iDnx

Client
Регистрация
06.06.2013
Сообщения
134
Благодарностей
108
Баллы
43
Если я не ошибаюсь пример от darkdiver как раз реализует то что вам нужно
Пример от darkdiver-а, насколько я понял, с переменной берет путь к капче сохраненной на жестком диске, кодирует в base64 и отправляет.
Мне же нужно срисовать загруженную, что-то вроде DrawToBitmap для строки.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Что значит срисовать загруженную? Загруженную как? Куда? Откуда?
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 285
Благодарностей
2 731
Баллы
113
дайте пример, я напишу код.
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
Кто-нибудь может показать пример авторизации и какого-нибудь действия через апи вк од или может быть реги инсты с использованием гет и пост запросов?Хочеться научиться работать на примерах.
 

iDnx

Client
Регистрация
06.06.2013
Сообщения
134
Благодарностей
108
Баллы
43

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 285
Благодарностей
2 731
Баллы
113
Бинарные данные через Http Get надо загружать в файл и его обрабатывать.
Если вы загружаете капчу, как строку в переменную, то ничего работать не будет, т.к. данные могут быть испорчены.
Или мы имелось в виду что-то другое?
 
  • Спасибо
Реакции: iDnx

iDnx

Client
Регистрация
06.06.2013
Сообщения
134
Благодарностей
108
Баллы
43
Бинарные данные через Http Get надо загружать в файл и его обрабатывать.
Если вы загружаете капчу, как строку в переменную, то ничего работать не будет, т.к. данные могут быть испорчены.
Или мы имелось в виду что-то другое?
Это и имелось ввиду. Спасибо за толковый ответ :-)
 

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
379
Баллы
63
Radzhab
а как подключается сама либа в зенопостере?
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
Посмотрите мои темы рпро создание ворд и несешь файлов. Аналогично
 

gluckbahr

Client
Регистрация
05.04.2014
Сообщения
84
Благодарностей
25
Баллы
18
Все прекрасно работало до сегодняшнего дня=( вдруг стало отдавать
errorInCaptchaRecognition
баланс в норме, ип привязан верно ( что может быть не так?
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
792
Баллы
113
в том что вы скорей всего отправляете (пытаетесь) не пнг а jpg.
//Отправка капчи из картинки
var captcha__get = project.Variables["captcha__get"].Value;
var base64String = Convert.ToBase64String(File.ReadAllBytes(captcha__get));
var result = ZennoPoster.CaptchaRecognition("Anti-Captcha.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;
 
Последнее редактирование:

gluckbahr

Client
Регистрация
05.04.2014
Сообщения
84
Благодарностей
25
Баллы
18
*.php, снес зенку почистил систему, поставил заработало хз в чем было дело=(
 

nomarketing

Client
Регистрация
01.11.2013
Сообщения
911
Благодарностей
178
Баллы
43
так вы все правильно делаете, модуль антикапчи возвращает ответ капчи, потом -|- потом жалобный url, если капча неправильно разгадана ( ответ-> vqqeu-|-http://AntiGate.com/res.php?key=мойКлюч&action=reportbad&id=161747680 <- url для жалобы)

Вот как исправить надо
C#:
//Отправка капчи из картинки

var captcha__get = project.Variables["captcha__get"].Value;
var image = System.Drawing.Image.FromFile(@captcha__get);

string base64String = String.Empty;

using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    byte[] imageBytes = ms.ToArray();
 
    base64String = Convert.ToBase64String(imageBytes);
}

var result = ZennoPoster.CaptchaRecognition("Anti-Captcha.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;
Что то пошло не так, после простого закрытия окно без ввода капчи, проэкт макер не останавливается...
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113

nomarketing

Client
Регистрация
01.11.2013
Сообщения
911
Благодарностей
178
Баллы
43
ждет как бы, пока введете каптчу )
перезапуск поможет PM
Это да но если я не хочу ее вводить а к примеру нажал закрыть окошко ? :-)
Ну это уже не важно главное что выводит то что мне нужно, странно почему нельзя это сделать методом черз сам Экшен Монки...
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Это да но если я не хочу ее вводить а к примеру нажал закрыть окошко ? :-)
Команда отправлена на разгадывание каптчи, введите пустоту или кракозябры в форму. И все.
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
так вы все правильно делаете, модуль антикапчи возвращает ответ капчи, потом -|- потом жалобный url, если капча неправильно разгадана ( ответ-> vqqeu-|-http://AntiGate.com/res.php?key=мойКлюч&action=reportbad&id=161747680 <- url для жалобы)

Вот как исправить надо
C#:
//Отправка капчи из картинки

var captcha__get = project.Variables["captcha__get"].Value;
var image = System.Drawing.Image.FromFile(@captcha__get);

string base64String = String.Empty;

using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    byte[] imageBytes = ms.ToArray();
 
    base64String = Convert.ToBase64String(imageBytes);
}

var result = ZennoPoster.CaptchaRecognition("Anti-Captcha.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;
Не могу понять, как реализовать отправку неправильно разгаданной капчи? Где произойдёт проверка, каким кодом?
Помогите примером, пожалуйста
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 452
Благодарностей
1 886
Баллы
113
Не могу понять, как реализовать отправку неправильно разгаданной капчи? Где произойдёт проверка, каким кодом?
Помогите примером, пожалуйста
Этот код выдаст Вам ответ на каптчу, если нужнен урл для жалобы, немного измените код
Код:
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1)
{
project.Variables["WrongCaptcha"].Value = tmp[1];
return tmp[0];
}
return result;
ну а дальше всё как обычно - проверяете ответ, делаете GET запрос. В коде этого нету, он только лишь разгадывает каптчу.
 
  • Спасибо
Реакции: Valiksim

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
ссылка на жалобу (если сервис это поддерживает) лежит тут tmp[1]
 
  • Спасибо
Реакции: Valiksim

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
ссылка на жалобу (если сервис это поддерживает) лежит тут tmp[1]
С кодом стало понятно, с дальнейшими действиями не совсем. Именно с ссылкой на жалобу.
Спасибо всем кто откликнулся, разобрался
 
Последнее редактирование:

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)