И снова эта ошибка...

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

Spikers07

Client
Регистрация
25.05.2016
Сообщения
123
Реакции
54
Баллы
28
Никак не могу понять в чем причина ошибки при выполнении данного кода:

C#:
Развернуть Свернуть Копировать
//Отправка капчи из картинки
var captcha__get = project.Variables["url_captcha"].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("CapMonster2.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;

В ответ приходит это:
C#:
Развернуть Свернуть Копировать
Выполнение действия CSharp OwnCode: CapMonster2.dll. Недостаточно памяти.


Переменная url_captcha равно адресу на компе капчи в формате php
Памяти хватает, место есть, сохранение капчи есть.


Данный код был взялгода три назад на этом форуме и отлично всегда работал. Но в последнее время начал ерундить.
Я не силён в си шарпе, просьба помогающим, если нашли ошибку, не указывать где что исправить, а оставить комментарий с готовым решением, буду очень благодарен! :dk:
 
Последнее редактирование:
Недавно отвечал на этот вопрос, вроде даже вам, что эта строчка тоже требует using.
Да, вы отвечали. Но я не понимаю что обернуть и как) Буду рад если вы обернете что надо и скинете готовое решение всего кода)
 
Да, вы отвечали. Но я не понимаю что обернуть и как) Буду рад если вы обернете что надо и скинете готовое решение всего кода)
Примерно так:
C#:
Развернуть Свернуть Копировать
//Отправка капчи из картинки
var captcha__get = project.Variables["url_captcha"].Value;
string base64String = String.Empty;
using (var image = System.Drawing.Image.FromFile(@captcha__get))
{
    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;
Не тестил.
 
C#:
Развернуть Свернуть Копировать
try
{
    // Тут весь проблемный код
}
catch(Exception e)
{
    project.SendErrorToLog(e.Message + "\r\n" + e.StackTrace, true);
    throw;
}
Суть в e.StackTrace, который показывает, какой метод вызвал исключение.
Так же содержит номер строки кода, но при таком способе, он не актуален в сниппетах.

Если я всё правильно сделал...
Создал новый кубик С#
Поместил туда данный код:


C#:
Развернуть Свернуть Копировать
try
{
//Отправка капчи из картинки
var captcha__get = project.Variables["url_captcha"].Value;
string base64String = String.Empty;
using (var image = System.Drawing.Image.FromFile(@captcha__get))
{
    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("CapMonster2.dll", base64String, "");
// отрезаем лишнее
var tmp = result.Split(new [] {"-|-"}, StringSplitOptions.None);
if (tmp.Length > 1) return tmp[0];
return result;    // Тут весь проблемный код
}
catch(Exception e)
{
    project.SendErrorToLog(e.Message + "\r\n" + e.StackTrace, true);
    throw;
}


В ответ я получил данное:


C#:
Развернуть Свернуть Копировать
Тип    Время    Сообщение
    23:34:39    " Недостаточно памяти.
   в System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement)
   в ZennoLab.OwnCode.Ca916fa1cabe74d46b36f78ae0c96cc75.Ma916fa1cabe74d46b36f78ae0c96cc75(IZennoPosterProjectModel project, Instance instance) в c:\Users\MSI\AppData\Local\Temp\CompilerFolder\ProjectMaker\A1de756d97f514572996743155446cd47\0jpsnmg2.10.cs:строка 35"
 
Так хоть понятно, какой метод вызывает ошибку.


Вероятно у вас битый файл или не поддерживаемый формат.

Интересно, возможно всё же проблема заключается в битом файле. Данный кубик скачивает капчу
59065

Если взять любое значение вместо переменной сид капчи и перейдем по ссылке то получим капчу и через браузер она сохраняется в jpeg формате, а через кубик в php. Может здесь что то не так?
 
простая операция на 2 строки, превращается в кучу кода :-)

Буду рад если предоставите готовое решение, попробую)


C#:
Развернуть Свернуть Копировать
string captchapath = project.Directory+@"\"+ project.Variables["url_captcha"].Value; // путь к картинке
string b64strcaptcha = Convert.ToBase64String(System.IO.File.ReadAllBytes(captchapath));
Выдает ошибку.
 
Последнее редактирование:
Решение так и не нашлось
 
В первом шаблоне с данным кодом капча разгадывается: прикрепление "капча1"
Во втором шаблоне с этим же кодом с тем же кубиком гет запросом скачивания как файл не разгадывается: прикпрепление "капча2"
 

Вложения

Также могу показать по таймвиверу
 
ну если битый файл , то тут ничего не сделаешь.
у меня вот так код отработал.
Посмотреть вложение 59124
ну если битый файл , то тут ничего не сделаешь.
у меня вот так код отработал.
Посмотреть вложение 59124
Мы сейчас проверили с опытным пользователем зенки, тоже удивился, у него всё работает, этот же шаблон, на 7.
У меня 5.43. Я подумал что это баг на этой версии, почему та раз через раз срабатывает.
В любом случае этот случай интересный, т.к реально один и тот же код в одном работает, в другом нет)
 
Решение всё так и не найдено
 
Решение всё так и не найдено
а какое решение ищется ? если битый файл, то хоть головой об стену бейся, в формат base64 принимаемый для распознования не получиться перевести.
выше подсказали решение , использовать try / cath . если код вышел по исключению , то выводить на красную и делать альтернативную логику. ну там или повторно пытаться получить файл или обновлять страницу, ну или какие другие действия.
 
а какое решение ищется ? если битый файл, то хоть головой об стену бейся, в формат base64 принимаемый для распознования не получиться перевести.
выше подсказали решение , использовать try / cath . если код вышел по исключению , то выводить на красную и делать альтернативную логику. ну там или повторно пытаться получить файл или обновлять страницу, ну или какие другие действия.
Снёс все версии зенки, включая семёрку и дроид, оставил последнюю что мне доступно 5.43
Почистил реестр ошибок, временные файлы и тп.
И только после этого заработал код.
 

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