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

  • Автор темы Автор темы ipetrov
  • Дата начала Дата начала

ipetrov

Client
Регистрация
21.02.2014
Сообщения
21
Реакции
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;

Ребята, помогайте, у меня уже психоз
 
Чъё API? Не ВК случаем?
 
lol, ну так шли напрямую пост запросом на антикапчу без использования модуля zp
 

  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
Работаю с соц. сетью через их 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;
 
Последнее редактирование:
Друзья, всем большое спасибо! Все заработало!
 
Подскажите как срисовать капчу из переменной дабы избавится от ее сохранения?
 
Если я не ошибаюсь пример от darkdiver как раз реализует то что вам нужно
 
Если я не ошибаюсь пример от darkdiver как раз реализует то что вам нужно
Пример от darkdiver-а, насколько я понял, с переменной берет путь к капче сохраненной на жестком диске, кодирует в base64 и отправляет.
Мне же нужно срисовать загруженную, что-то вроде DrawToBitmap для строки.
 
Что значит срисовать загруженную? Загруженную как? Куда? Откуда?
 
дайте пример, я напишу код.
 
Кто-нибудь может показать пример авторизации и какого-нибудь действия через апи вк од или может быть реги инсты с использованием гет и пост запросов?Хочеться научиться работать на примерах.
 
Бинарные данные через Http Get надо загружать в файл и его обрабатывать.
Если вы загружаете капчу, как строку в переменную, то ничего работать не будет, т.к. данные могут быть испорчены.
Или мы имелось в виду что-то другое?
 
  • Спасибо
Реакции: iDnx
Бинарные данные через Http Get надо загружать в файл и его обрабатывать.
Если вы загружаете капчу, как строку в переменную, то ничего работать не будет, т.к. данные могут быть испорчены.
Или мы имелось в виду что-то другое?
Это и имелось ввиду. Спасибо за толковый ответ :)
 
Radzhab
а как подключается сама либа в зенопостере?
 
Все прекрасно работало до сегодняшнего дня=( вдруг стало отдавать
errorInCaptchaRecognition
баланс в норме, ип привязан верно ( что может быть не так?
 
в том что вы скорей всего отправляете (пытаетесь) не пнг а 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;
 
Последнее редактирование:
*.php, снес зенку почистил систему, поставил заработало хз в чем было дело=(
 
так вы все правильно делаете, модуль антикапчи возвращает ответ капчи, потом -|- потом жалобный 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;
Что то пошло не так, после простого закрытия окно без ввода капчи, проэкт макер не останавливается...
 
ждет как бы, пока введете каптчу )
перезапуск поможет PM
Это да но если я не хочу ее вводить а к примеру нажал закрыть окошко ? :)
Ну это уже не важно главное что выводит то что мне нужно, странно почему нельзя это сделать методом черз сам Экшен Монки...
 
Это да но если я не хочу ее вводить а к примеру нажал закрыть окошко ? :-)
Команда отправлена на разгадывание каптчи, введите пустоту или кракозябры в форму. И все.
 
так вы все правильно делаете, модуль антикапчи возвращает ответ капчи, потом -|- потом жалобный 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;
Не могу понять, как реализовать отправку неправильно разгаданной капчи? Где произойдёт проверка, каким кодом?
Помогите примером, пожалуйста
 
Не могу понять, как реализовать отправку неправильно разгаданной капчи? Где произойдёт проверка, каким кодом?
Помогите примером, пожалуйста

Этот код выдаст Вам ответ на каптчу, если нужнен урл для жалобы, немного измените код
Код:
Развернуть Свернуть Копировать
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1)
{
project.Variables["WrongCaptcha"].Value = tmp[1];
return tmp[0];
}
return result;

ну а дальше всё как обычно - проверяете ответ, делаете GET запрос. В коде этого нету, он только лишь разгадывает каптчу.
 
  • Спасибо
Реакции: Valiksim
ссылка на жалобу (если сервис это поддерживает) лежит тут tmp[1]
 
  • Спасибо
Реакции: Valiksim
ссылка на жалобу (если сервис это поддерживает) лежит тут tmp[1]
С кодом стало понятно, с дальнейшими действиями не совсем. Именно с ссылкой на жалобу.
Спасибо всем кто откликнулся, разобрался
 
Последнее редактирование:

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