- Регистрация
- 04.11.2010
- Сообщения
- 2 382
- Реакции
- 917
- Баллы
- 113
ZennoPoster очень гибок и легок в освоении, но для легкости освоения часть функциональности по умолчанию отсутствует, некоторые не часто встречающиеся вещи нельзя реализовать стандартным функционалом или они реализуются в несколько шагов хотя действие "типично" или приходится заниматься размножением кубиков в ряде случаев.
Но все эти решить участки быстро и удобно нам может помочь C#.
Выделите час времени и Вы уже начнете ориентироваться в сниппетах и поймете, как написать свой первый C# сниппет.
C# (произносится «си шарп») — объектно-ориентированный язык программирования.
Подробнее - https://ru.wikipedia.org/wiki/C_Sharp
Мы сейчас не будем учить C#, а лишь разберем, как использовать и чуть-чуть править готовые участки кода, которые заменят/дополнят нам наш код на кубиках.
Сниппет (в программировании) — небольшой фрагмент исходного кода или текста, пригодного для повторного использования. Т.е. обособленный кусочек кода, который может использоваться отдельно.
В нашем случае это кусок кода который будет заменять 1 или несколько обычных Zenno-кубиков
Шаг сниппета в проекте:
Пример сниппета попавшегося первым мне на глаза:
Часто для сниппетов нужна актуальная версия ZennoPoster. Многие сниппеты используют методы добавленные в последних версиях. На старых версиях ZennoPoster сниппет может валиться с ошибкой.
Метод (в C#) — это функция или процедура, принадлежащая какому-то классу или объекту. Как и процедура в процедурном программировании, метод состоит из некоторого количества операторов для выполнения какого-то действия и имеет набор входных аргументов
Простыми словами - это некая команда для объекта, часто с уточняющими параметрами. Пример рассмотрим чуть ниже.
Каждый сниппет часто состоит из 3х вещей:
1. Присваиваем значение переменым
2. Выполняем ряд методов над этими перемеными или другими объектами
3. Выводим полученный результат после обработки методами
Это не обязательная последовательность и уже тем более не обязательные составляющие.
В C# коде, все что идет после // и до переноса строки игнорируется, т.е. после символов // как правило пишут пояснения к строке кода.
При ошибке в сниппете Вам в логах ZennoPoster сообщат номер строки и где эта ошибка.
О переменных:
-Переменые внутри сниппета, отдельны от переменых внутри нашего шаблона. Их можно связать неким образом, но это ни одно и тоже.
-Переменые в C# бываю разного типа. (основы C# это, просто загуглите для понимания: "Типы переменых(данных) в C#"). Одни методы работают только с перемеными чисел, другие с текстом и т.д.
т.е. это не как в стандартных кубиках шаблона, где мы переменой присваиваем все что угодно.
Вот пример обозначения переменых в сниппете с комментариями к ним:
О методах:
Что такое методы мы разобрались выше.
Метод может взаимодействовать на переменую, а может на любой другой объект.
т.е. например вот такая строка очистит куки инстанса:
А такая, разобьет строку по разделителю |
К каждому виду объекта можно использовать только определенные методы. т.е. чистить куки у переменой или пытаться разбить инстанс нельзя.)
Как правильно записать метод и к чему его можно применить всегда написано к описанию методу. т.е. что в методе в каком порядке должно стоять., грубо говоря вы берете образец из инструкции и подставляете свои значения. Ничего сложного.
Методы ZennoPoster расписаны тут - http://zennolab.com/wiki/en:zennoposter:macros-documentation. Выбираете свою версию Zenno. (только на английском языке, но даже со скудным английским все будет понятно при желании разобраться)
Вывод результата C# шага:
В значении переменой выполненного C# шага по умолчанию будет текст "OK", но если в коде сниппета есть строка:
где [...] может быть переменой, текстом и т.д., т.е например (return name; или return "finish";)
то в значение переменой C# шага будет равно значению того, что указано в return строке.
По введению в основы это всё. Дальше Вам нужно чуть всмотреться и вчитаться в готовые сниппеты и в комментарии к ним.
* Раздел по сниппетам на форуме, тут можно найти готовые сниппеты и задать вопросы - http://zennolab.com/discussion/forums/snipety.136/
* Попросить написать сниппет можно в этой теме - http://zennolab.com/discussion/threads/besplatnye-snipety-na-zakaz.23450/
По своему опыту скажу, что в 95% случаях уже на форуме есть готовые решения под необходимые задачи в разделе сниппетов, просто нужно их найти и возможно чуть подправить или скомбинировать с чем-то.
Официально вам никто не должен писать сниппет по просьбе, даже если у Вас pro версия ZennoPoster'а. Это не входит в область поддержки саппорта, но если корректно составлен вопрос, то вопрос врятли останется без внимания со стороны Zenno сообщества.
p.s. Я не C# кодер, если выразился где-то неверно, то будьте добры сообщить в теме.)
Подборка сниппетов которые я чаще всего использую:
(сниппеты мои, знакомых кодеров и наших форумчан)
Вывести количество эелементов на странице
Присваиваем значение перемменной, исходя из значения другой переменной
Если переменная month нашего проекта будет равна "янв", то результат сниппета будет = 1, если "фев", то результат выполнения сниппета будет = 2 и т.д.
В лучшем виде заменяет switch шаг+установку значения переменой.
Меняем размер инстанса
Замена с "донором", по регулярному выражению
Разбиваем строку (т.е. сплитуем) по разделителю | и раскидываю полученные части по переменным.
Проверка наличия строки в списке. С учетом регистра и т.д., т.е. текст в переменной и строка списка должны быть идентичны. Если нашлась строка то выводит true, а иначе false.
Ищем и выводим из списка строку которая содержит текст из переменной. Без учета регистра.
Код поиска частичного совпадения в списке. Если какая-то из строк списка включает в себя значение переменной, то выводим yes, иначе no.
Ищет в таблице в укзанном столбце ячеку которая содержит переменную, если находит то выводит true, а иначе false.
Меняем тип переменной, для работы внутри методов C#
Ставим значение 0 всем чекбоксам на странице
Делаем клик по всем чекбоксам на странице
Получаем размер файла в байтах
Получаем количество символов в значении переменной
Разбить файл на мелкие по разделителю внутри текста. 11111 - разделитель в тексте. Файлы сохраняются в папку с шаблоном.
текст изначально выглядит так:
Помещает значее переменной var1 в буфер обмена и делает вставку нажатием ctrl+v
Но все эти решить участки быстро и удобно нам может помочь C#.
Выделите час времени и Вы уже начнете ориентироваться в сниппетах и поймете, как написать свой первый C# сниппет.
C# (произносится «си шарп») — объектно-ориентированный язык программирования.
Подробнее - https://ru.wikipedia.org/wiki/C_Sharp
Мы сейчас не будем учить C#, а лишь разберем, как использовать и чуть-чуть править готовые участки кода, которые заменят/дополнят нам наш код на кубиках.
Сниппет (в программировании) — небольшой фрагмент исходного кода или текста, пригодного для повторного использования. Т.е. обособленный кусочек кода, который может использоваться отдельно.
В нашем случае это кусок кода который будет заменять 1 или несколько обычных Zenno-кубиков
Шаг сниппета в проекте:
Пример сниппета попавшегося первым мне на глаза:
Код:
string acc_full = project.Variables["account_source"].Value;
var account = acc_full.Split('|').ToList();
project.Variables["login"].Value = account[0];
project.Variables["pass"].Value = account[1];
project.Variables["hz"].Value = account[2];
Часто для сниппетов нужна актуальная версия ZennoPoster. Многие сниппеты используют методы добавленные в последних версиях. На старых версиях ZennoPoster сниппет может валиться с ошибкой.
Метод (в C#) — это функция или процедура, принадлежащая какому-то классу или объекту. Как и процедура в процедурном программировании, метод состоит из некоторого количества операторов для выполнения какого-то действия и имеет набор входных аргументов
Простыми словами - это некая команда для объекта, часто с уточняющими параметрами. Пример рассмотрим чуть ниже.
Каждый сниппет часто состоит из 3х вещей:
1. Присваиваем значение переменым
2. Выполняем ряд методов над этими перемеными или другими объектами
3. Выводим полученный результат после обработки методами
Это не обязательная последовательность и уже тем более не обязательные составляющие.
В C# коде, все что идет после // и до переноса строки игнорируется, т.е. после символов // как правило пишут пояснения к строке кода.
При ошибке в сниппете Вам в логах ZennoPoster сообщат номер строки и где эта ошибка.
О переменных:
-Переменые внутри сниппета, отдельны от переменых внутри нашего шаблона. Их можно связать неким образом, но это ни одно и тоже.
-Переменые в C# бываю разного типа. (основы C# это, просто загуглите для понимания: "Типы переменых(данных) в C#"). Одни методы работают только с перемеными чисел, другие с текстом и т.д.
т.е. это не как в стандартных кубиках шаблона, где мы переменой присваиваем все что угодно.
Вот пример обозначения переменых в сниппете с комментариями к ним:
Код:
var list = project.Lists["BlackList"]; //project.Lists["BlackList"]; - в таком формате пишется наш обычный лист в проекте с именем BlackList, т.е. в это строке C#-ной переменой типа var именем list мы присваиваем значение нашего списка с именем BlackList.
string id = project.Variables["it"].Value; // тут мы C#-ной переменой типа string и именем id присваиваем значение нашей переменой из проекта с именем it.
project.Variables["text"].Value = "LightWood пишет шаблоны на заказ и консультирует по ZennoPoster"; //Здесь мы изнутри C# кода присваиваем переменой проекта текст указанный в кавычках. Тут также можно присваивать, значение C#-ной переменой или результат выполнения метода, но в этих случаях уже не надо использовать кавычки. По обилию примеров готовых сниппетов на форуме все поймете)
О методах:
Что такое методы мы разобрались выше.
Метод может взаимодействовать на переменую, а может на любой другой объект.
т.е. например вот такая строка очистит куки инстанса:
Код:
instance.ClearCookie();
А такая, разобьет строку по разделителю |
Код:
string acc_full = project.Variables["account_source"].Value;
var account = acc_full.Split('|').ToList(); // Split('|').ToList(); - вот непосредственно метод разделения
К каждому виду объекта можно использовать только определенные методы. т.е. чистить куки у переменой или пытаться разбить инстанс нельзя.)
Как правильно записать метод и к чему его можно применить всегда написано к описанию методу. т.е. что в методе в каком порядке должно стоять., грубо говоря вы берете образец из инструкции и подставляете свои значения. Ничего сложного.
Методы ZennoPoster расписаны тут - http://zennolab.com/wiki/en:zennoposter:macros-documentation. Выбираете свою версию Zenno. (только на английском языке, но даже со скудным английским все будет понятно при желании разобраться)
Вывод результата C# шага:
В значении переменой выполненного C# шага по умолчанию будет текст "OK", но если в коде сниппета есть строка:
Код:
return [...] ;
то в значение переменой C# шага будет равно значению того, что указано в return строке.
По введению в основы это всё. Дальше Вам нужно чуть всмотреться и вчитаться в готовые сниппеты и в комментарии к ним.
* Раздел по сниппетам на форуме, тут можно найти готовые сниппеты и задать вопросы - http://zennolab.com/discussion/forums/snipety.136/
* Попросить написать сниппет можно в этой теме - http://zennolab.com/discussion/threads/besplatnye-snipety-na-zakaz.23450/
По своему опыту скажу, что в 95% случаях уже на форуме есть готовые решения под необходимые задачи в разделе сниппетов, просто нужно их найти и возможно чуть подправить или скомбинировать с чем-то.
Официально вам никто не должен писать сниппет по просьбе, даже если у Вас pro версия ZennoPoster'а. Это не входит в область поддержки саппорта, но если корректно составлен вопрос, то вопрос врятли останется без внимания со стороны Zenno сообщества.
p.s. Я не C# кодер, если выразился где-то неверно, то будьте добры сообщить в теме.)
Подборка сниппетов которые я чаще всего использую:
(сниппеты мои, знакомых кодеров и наших форумчан)
Вывести количество эелементов на странице
Код:
return instance.ActiveTab.FindElementsByAttribute("тэг","имя атрибута","значение","тип поиска").Count;
Присваиваем значение перемменной, исходя из значения другой переменной
Если переменная month нашего проекта будет равна "янв", то результат сниппета будет = 1, если "фев", то результат выполнения сниппета будет = 2 и т.д.
В лучшем виде заменяет switch шаг+установку значения переменой.
Код:
return "янв|1,фев|2,март|3,апр|4,май|5,июн|6,июл|7,авг|8,сен|9,окт|10,ноя|11,дек|12".Split(',').First(s=>s.Contains(project.Variables["month"].Value)).Split('|')[1];
Меняем размер инстанса
Код:
instance.SetWindowSize(800,600);
Замена с "донором", по регулярному выражению
Код:
return Regex.Replace(project.Variables["text"].Value,"([a-zA-Zа-яА-Я; ])","$1*",RegexOptions.None); //после каждой буквы в переменной text поставит *.
// т.е.если было аб123вг, то результат выполнения а*б*12в*г*
Разбиваем строку (т.е. сплитуем) по разделителю | и раскидываю полученные части по переменным.
Код:
string acc_full = project.Variables["account_source"].Value;
var account = acc_full.Split('|').ToList();
project.Variables["login"].Value = account[0];
project.Variables["pass"].Value = account[1];
project.Variables["hz"].Value = account[2];
Проверка наличия строки в списке. С учетом регистра и т.д., т.е. текст в переменной и строка списка должны быть идентичны. Если нашлась строка то выводит true, а иначе false.
Код:
var list = project.Lists["BlackList"];
string id = project.Variables["id"].Value;
if(list.Contains(id))
{
return "true";
}
else
{
return "false";
}
Ищем и выводим из списка строку которая содержит текст из переменной. Без учета регистра.
Код:
List<string> list = new List<string>();
list.AddRange(project.Lists["all"]);
string myString = project.Variables["recipient"].Value;
var matchingvalues = list
.FindAll(x => x.IndexOf(myString, StringComparison.OrdinalIgnoreCase) != -1);
return matchingvalues.First();
Код поиска частичного совпадения в списке. Если какая-то из строк списка включает в себя значение переменной, то выводим yes, иначе no.
Код:
// берем из переменной текст, который надо искать
var textContains = project.Variables["tmp_city"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["city"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
for(int i=0; i < sourceList.Count; i++)
{
// читаем строку из списка
var str = sourceList[i];
// проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
if (str.Contains(textContains))
return "yes";
}
}
// если ничего не нашли возвращаем "no"
return "no";
Ищет в таблице в укзанном столбце ячеку которая содержит переменную, если находит то выводит true, а иначе false.
Код:
var table = project.Tables["base"];
for(int i = 0; i < table.RowCount; i++)
{
int col_num = 0; //порядковый номер колонки
string cur_string = table.GetCell(col_num,i); //текущая строка которую обрабатываем
//project.SendInfoToLog(cur_string);
if(cur_string.Contains(project.Variables["partSite"].Value))
{
return "true";
}
}
return "false";
Меняем тип переменной, для работы внутри методов C#
Код:
// Переводим переменную проекта mailDays типа стринг, в тип инт
int mailDaysC = int.Parse(project.Variables["mailDays"].Value);
//Переводим переменную проекта useSSL типа стринг, в тип bool
bool mailDaysC = bool.Parse(project.Variables["useSSL"].Value);
Ставим значение 0 всем чекбоксам на странице
Код:
HtmlElementCollection hecol = instance.ActiveTab.FindElementsByAttribute("input:checkbox", "fulltagname", "input:checkbox", "regexp");
for(int i = 0; i< hecol.Count; i++)
{
hecol.Elements[i].SetValue("0", instance.EmulationLevel, false);
}
Делаем клик по всем чекбоксам на странице
Код:
HtmlElementCollection hecol = instance.ActiveTab.FindElementsByAttribute("input:checkbox", "fulltagname", "input:checkbox", "regexp");
for(int i = 0; i< hecol.Count; i++)
{
hecol.Elements[i].Click();
}
Получаем размер файла в байтах
Код:
var length = new System.IO.FileInfo(@"C:\img.png").Length;
return length;
Получаем количество символов в значении переменной
Код:
return project.Variables["var1"].Value.Length;
Разбить файл на мелкие по разделителю внутри текста. 11111 - разделитель в тексте. Файлы сохраняются в папку с шаблоном.
текст изначально выглядит так:
a
b
c
11111
d
e
f
11111
g
h
i
Код:
string data = File.ReadAllText(project.Directory+"\\"+ "data.txt");
string separator = "11111";
string[] text = data.Split(new string[] { separator }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < text.Length; i++)
{
File.WriteAllText(project.Directory+"\\"+ i + ".txt", text[i].Trim());
}
Помещает значее переменной var1 в буфер обмена и делает вставку нажатием ctrl+v
Код:
var descr = project.Variables["var1"].Value;
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("v","press","ctrl");
- Номер конкурса статей
- Пятый конкурс статей
- Тема статьи
- Нестандартные хаки
Последнее редактирование:




.