2 место Ошибки в шабах?! Находим и решаем их в 2 раза быстрее!!!

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Реакции
917
Баллы
113
Грамотно заданный вопрос, это половина ответа.
А в зп грамотно выстроенные логи ошибок, это половина решения.


На этом несложном примере, который вы с легкостью сможете использовать, в своих шаблонах, я это продемонстрирую.
Вы не пожалеете, если разберетесь!

Для начала нужно усвоить, что каждый шаг в шаблоне имеет уникальный айди, по которому его можно идентифицировать и найти в ProjectMaker'e.

Для того чтобы получить id шага с ошибкой, необходимо в логах ZennoPoster, кликнуть по ошибке правой клавишей мыши и нажать «скопировать id».
nqcvNai.png


Далее в в ProjectMaker'e нажать на поиск, вставить айди и найти элимент и уже разбираться почему все это так.
5eQagpf.png


Но пока не скопируешь id и не найдешь его в ProjectMaker'e, непонятно где произошла ошибка, также непонятно сколько всего таких ошибок, а сколько других. Заниматься удручительным копипастом из логов, это решение для извращенцев. Надеюсь ты не такой, мой читатель. Задачи нужно решать элегантно и просто)

Я предлагаю Вам следующее решение:
K7E4NKS.png


Как видно на скрине используется большой красный круг badEnd.
Но к нему не ведет ни одной стрелки. т. к. шаблон сам автоматом перебрасывает выполнение на badEnd, если во время выполнения произошла ошибка.

Чтобы выловить ошибку и чтобы она была наглядно отображена я делаю следующее:
1. Получаю tickCount, это уникальное цифровое значение. Это для того, чтобы были объедены элементы и логи которые мы получим ниже, для каждого потока, но и уникальны, чтобы названия файлов не совпадали с названиями которые сохранят другие потоки.
2. Получаем ID ошибки внутри шаблона
DV2ceVJ.png

Многое и все основы доступны в ЗП без знаний языков программирования, но в некоторых ситуациях без них не обойтись. Просто используйте этот код для получения ID шага в котором ошибка.
3. С помощью CaptchaSaver мы сделаем скрин инстанса. Действует, как модуль распознавания каптчи, только мы указывает тег который хотим заскринить, в нашем случае вся видимая часть, это тег BODY (Кто не знает почему BODY, изучите основы html. В теге BODY, вся видимая часть страницы находится)
rh869Cu.png

И во вкладке "дополнительно" Указываем путь и название полученного скрина для сохранения скрина. В нашем случае это:
{-Project.Directory-}error\{-Variable.Log_Error-}—{-Variable.tickID-}.jpg
директория проекта\error\полученный айди в шаге2—уникальный тик айди.jpg

lkFTuIv.png

4. Сохраняем исходный код страницы.
5. Сохраняем DOM страницы.
6. Этот C# код получает название и значение всех переменных, используемых в шаблоне.
7. Сохраняем все эти переменные в файл.
3TEXeRb.png


В итоге ваши логи будут выглядеть так:
LnQEX3y.png

ga-2225 это пример id ошибки, у Вас их может быть много и разных, но благодаря tickCount различные файлы одной ошибки, будут сгруппированы!

А благодаря скрину вы Визуально увидите ошибку, а благодаря исходному коду и DOM'у страницы, Вы будете знать в каком состоянии находился код страницы в момент ошибки.

Править ошибки будет легко и просто!!

Для использования шаба, просто скопируйте этот столбец с шагами в свой проект и соедините с BadEnd.
И вы поймете насколько наглядны и понятны стали ошибки!
 
Номер конкурса статей
  1. Третий конкурс статей
Тема статьи
  1. Другое

Вложения

Последнее редактирование:
Я на 4-ке тоже скринил проблемные шаблоны, но очень часто в результате сохранялась черная картинка.
Очень хороший способ для универсальных шаблонов, например, постер в какой-то движок разных модификаций, где быстрее найти ошибку просто взглянуть на проблемные скриншоты.
ТС, спасибо за интерсные не стандартные статьи!

Кстати, за "человеческие логи" я просил еще с первых 4-ок, так как в тройке можно было давать кастомные айди шагов и эти же названия светились в логах.
http://zennolab.com/discussion/threads/log-oshibok-i-chto-dalshe.5338/#post-50950
 
однозначно плюс, можно получить исходник чтобы не переписывать с картинок?
 
Несколько раз перечитал!!! Но то, что забыл прикрепить шаб так и не заметил. 5 мин. Сейчас организую.
 
Шикарно. Очень интересное решения.
LightWood не воспринимай как критику, просто прочел статью, и пришла мисль, сохранять лог не в нескольких файлах, а одним html файлом, где и скриншоти, и логи, и значения переменных выставление в удобном формате, чтоб легко осмыслить их.
Єто не критика, а больше заметка для себя чтоб когда буду делать такую штуку не забить идею, и применить ее у себя. просто добавить в свои шаблони режим трасироки ошибок. В входящих настройках зделать чекбокс
 
Спасибо! Обязательно воспользуюсь. Давно о таком думал, а тут все так красиво и показательно.
ЗЫ svaminar толково подсказал. Спасиб и тебе.
 
Я придерживаюсь стратегии: Разделяй и властвуй.
Можно сделать как угодно. Я подаю идеи, а вы делитесь своими мыслями и виденьем!)
Мне удобней именно такой вид: раздельно, но сгрупированно!

Голосование за лучшую статью открыто: http://zennolab.com/discussion/threads/golosovanie.19934/
Мои две статьи:
Кто зарабатывает 16000$ в день на продаже аккаунтов?! Получаем статистику продаж интернет магазинов!
и
Ошибки в шабах?! Находим и решаем их в 2 раза быстрее!!!


Поддержите понравившиеся Вам статьи.http://zennolab.com/discussion/threads/oshibki-v-shabax-naxodim-i-reshaem-ix-v-2-raza-bystree.19930/
 
Все хорошо, только в числе двадцать вы ноль забыли указать :)
Правильный заголовок был бы
Ошибки в шабах?! Находим и решаем их в 20 раза быстрее!!!
 
хорошоая статья, из разряда мастхев.
LightWood, как считаешь, можно ли улучшить обработчик по таким параметрам?
Я предлагаю рассмотреть такие пункты.
1.Получать скриншот не только первого документа, н и всех остальных, т. е. в капчасейвере поставить -1 или использовать в шарпе instance.ActiveTab.GetPagePreview().
2.Получать дом не стандартным методом а через return string .Join("\r\n", instance.ActiveTab.AllDocuments.Documents.Select(doc=>doc.Body.OuterHtml)); Как показала практика в стандартном методе отображется далеко не все

Сделать это все в одном маленьком красном кубике было бы вобще чудесно-причудесно!
Еще раз спасибо за статью!
 
Хорошее решение, нужно будет тоже добавить себе такого рода логирование.

Единственный момент - сейчас уже добавили скриншот браузера, как стандартное действие. Можно без каптчасейверов, с ним помнится были когда то проблемы.
 
Подскажите, а что в версии 4.3.5.0 может отличаться от новой, что этот шаблон у меня не работает? Добавил это логирование в свой шаблон и при старте работы шаблона выдает ошибки С# кода.
 
Жаль. Я хоть и конкурент вроде как, но я бы и сотню голосов за эту вашу статью и идею отдал.
 
Процитируйте тут код и ошибку, может подскажет кто-то, как заставить работать на вашей древней версии.
 
Код:
Развернуть Свернуть Копировать
Ошибка в действии "CS0246" "Не удалось найти имя типа или пространства имен 'LastError' (возможно, пропущена используемая директива или ссылка на сборку)" в строке "LastError error = project.GetLastError();"
Отладка проекта завершилась с ошибкой
Ошибка в действии "CS1061" ""ZennoLab.InterfacesLibrary.ProjectModel.Collections.ILocalVariables" не содержит определение для "Keys". Не удалось найти метод  расширения "Keys", принимающий первый аргумент типа "ZennoLab.InterfacesLibrary.ProjectModel.Collections.ILocalVariables"  (пропущено использование директивы или ссылка на сборку?)" в строке "var sb = new StringBuilder();foreach(var variable in project.Variables.Keys){    sb.AppendFormat("Name: {0} Value: {1}\r\n", variable, project.Variables[variable].Value);}return sb.ToString();"
Ошибка в действии "CS1061" ""ZennoLab.InterfacesLibrary.ProjectModel.IZennoPosterProjectModel" не содержит определение для "GetLastError". Не удалось найти метод  расширения "GetLastError", принимающий первый аргумент типа "ZennoLab.InterfacesLibrary.ProjectModel.IZennoPosterProjectModel"  (пропущено использование директивы или ссылка на сборку?)" в строке "LastError error = project.GetLastError();"

Это все, что в логе. Ошибку выдает сразу же после старта.
 
Обновляйте программу :)
 
Разработчики Zenno могли бы встроить аналогичное решение по умолчанию.
Например, в качестве опции.
 
  • Спасибо
Реакции: sipoku и Oleg1987
Разработчики Zenno могли бы встроить аналогичное решение по умолчанию.
Например, в качестве опции.

А еще они могли бы полностью писать за нас все шаблоны. Ну так, как опция. :)
 
хорошоая статья, из разряда мастхев.
LightWood, как считаешь, можно ли улучшить обработчик по таким параметрам?
Я предлагаю рассмотреть такие пункты.
1.Получать скриншот не только первого документа, н и всех остальных, т. е. в капчасейвере поставить -1 или использовать в шарпе instance.ActiveTab.GetPagePreview().
2.Получать дом не стандартным методом а через return string .Join("\r\n", instance.ActiveTab.AllDocuments.Documents.Select(doc=>doc.Body.OuterHtml)); Как показала практика в стандартном методе отображется далеко не все

Сделать это все в одном маленьком красном кубике было бы вобще чудесно-причудесно!
Еще раз спасибо за статью!
1. Да можно вполне думаю
2. Мне стандартного вроде хватало всегда. Но можно и через C#.

Вцелом я старался C# избегать. Применял только в тех моментах, когда нет аналогов в стандартных средствах ZP.
Народ по большей части не понимает С# и поэтому его избегает.
Хотел показать, что на кубиках можно сделать весьма интересные и функциональные вещи.

Многие посмотрели видео уроки как регать е-мэйлы на автомате, как использовать стандартный консруктор регулярных выражений, а основные принципы самого html и работы с элементами продолжают не понимать.
 
Последнее редактирование:
  • Спасибо
Реакции: Nike59
2я статья не лавки тем, что "считать чужие деньги" дурное занятие.
А за первую спасибо. Сегодня пригодилось, выручил.
Добра тебе \о/
Да пожалуйста) И тебе добра))

Очень грамотное и верное решение уметь собирать данные и приводить их в какую-то статистику. Ибо не нужно будет никому писать "Как заработать", если можно путем сбора данных самому вычислять источники заработка.
Считаю, что та статья реально показывает настандартный подход простой реализацией.
Считать $$$ для оценки рынка очень даже хорошо)
 
Последнее редактирование:
Ребята никто не делал более продвинутую версию ? поделитесь.
 
C#:
Развернуть Свернуть Копировать
//случай для сбора инфы об ошибке в с# кубике
try{
  
    //попытка прочитать несуществующий файл
    File.ReadAllBytes("asdfasdf");
  
}catch(Exception e){
    //сохраняем стек ошибки в зп переменню
    project.Variables["status"].Value = e.ToString();
    throw e;
}
 
Статья супер, все с умом. Я еще код страницы где баг вылетел, сохраняю в файл .html, что бы в хроме глянуть, ну вы поняли.
 

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