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

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
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:
 
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 352
Благодарностей
3 279
Баллы
113

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
Недавно отвечал на этот вопрос, вроде даже вам, что эта строчка тоже требует using.
Да, вы отвечали. Но я не понимаю что обернуть и как) Буду рад если вы обернете что надо и скинете готовое решение всего кода)
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 352
Благодарностей
3 279
Баллы
113
Да, вы отвечали. Но я не понимаю что обернуть и как) Буду рад если вы обернете что надо и скинете готовое решение всего кода)
Примерно так:
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;
Не тестил.
 

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 352
Благодарностей
3 279
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
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"
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 352
Благодарностей
3 279
Баллы
113

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
Так хоть понятно, какой метод вызывает ошибку.


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

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

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
простая операция на 2 строки, превращается в кучу кода :-)
Буду рад если предоставите готовое решение, попробую)


C#:
string captchapath = project.Directory+@"\"+ project.Variables["url_captcha"].Value; // путь к картинке
string b64strcaptcha = Convert.ToBase64String(System.IO.File.ReadAllBytes(captchapath));
Выдает ошибку.
 
Последнее редактирование:

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
Решение так и не нашлось
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
В первом шаблоне с данным кодом капча разгадывается: прикрепление "капча1"
Во втором шаблоне с этим же кодом с тем же кубиком гет запросом скачивания как файл не разгадывается: прикпрепление "капча2"
 

Вложения

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
Также могу показать по таймвиверу
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
ну если битый файл , то тут ничего не сделаешь.
у меня вот так код отработал.
Посмотреть вложение 59124
ну если битый файл , то тут ничего не сделаешь.
у меня вот так код отработал.
Посмотреть вложение 59124
Мы сейчас проверили с опытным пользователем зенки, тоже удивился, у него всё работает, этот же шаблон, на 7.
У меня 5.43. Я подумал что это баг на этой версии, почему та раз через раз срабатывает.
В любом случае этот случай интересный, т.к реально один и тот же код в одном работает, в другом нет)
 

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
Решение всё так и не найдено
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
Решение всё так и не найдено
а какое решение ищется ? если битый файл, то хоть головой об стену бейся, в формат base64 принимаемый для распознования не получиться перевести.
выше подсказали решение , использовать try / cath . если код вышел по исключению , то выводить на красную и делать альтернативную логику. ну там или повторно пытаться получить файл или обновлять страницу, ну или какие другие действия.
 

Spikers07

Client
Регистрация
25.05.2016
Сообщения
119
Благодарностей
53
Баллы
28
а какое решение ищется ? если битый файл, то хоть головой об стену бейся, в формат base64 принимаемый для распознования не получиться перевести.
выше подсказали решение , использовать try / cath . если код вышел по исключению , то выводить на красную и делать альтернативную логику. ну там или повторно пытаться получить файл или обновлять страницу, ну или какие другие действия.
Снёс все версии зенки, включая семёрку и дроид, оставил последнюю что мне доступно 5.43
Почистил реестр ошибок, временные файлы и тп.
И только после этого заработал код.
 

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