- Регистрация
- 04.11.2010
- Сообщения
- 2 382
- Благодарностей
- 916
- Баллы
- 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");
- Тема статьи
- Нестандартные хаки
- Номер конкурса статей
- Пятый конкурс статей
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: