Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Оглавление:

Expand
titleНажмите здесь, чтобы развернуть оглавление
Table of Contents
minLevel1
maxLevel7
exclude^Оглавление:$

Описание

Окно переменных служит для создания, удаления, переименования переменных проекта и редактирования их значений. По сути это окно представляет собой таблицу с возможностью редактирования и сортировки переменных.

Данное окно удобно использовать при отладке.
Во время выполнения проекта изменять значения переменных можно с помощью экшена Обработка переменных


Для чего это используется?

  • Различные манипуляции с переменными.

  • Отслеживание изменений происходящих с переменными в процессе отладки проекта.


Как открыть окно?

Note

Если вы не видите панель статических блоков, то кликните правой клавишей мыши на пустом пространстве рабочего окна и установите чекбокс “Показать статические блоки” в контекстном меню.

  • Второй способ - через меню Окно => Переменные.


Элементы управления

Рассмотрим каждый элемент окна переменных:

Типы переменных

По сути это таб переключающий отображение выбранного типа переменных. Имеет шесть вариантов:

Свои

Это переменные, которые пользователь сам создаёт в процессе написания шаблона. Переменные должны быть обязательно на английском языке. Не допускается использование пробелов и других символов, кроме символа нижнего подчеркивания _. В названии переменной разрешается использование цифр, но не в начале слова.

Авто

Авто-переменные генерируются автоматически в режиме записи проекта, а также при добавлении некоторых кубиков, например при автоматическом добавлении кубика Взятие значения . Автосгенерированные переменные имеют примерно такие названия - Variable1, RecognitionResult0, однако вы всегда можете переместить авто-переменные в Свои и там задать им любое желаемое имя.

Как переместить автоматически созданную переменную в Свои?

Для этого надо перейти во вкладку Авто, выделить переменную и нажать кнопку “Переместить в Свои“:

После перемещения переменной в Свои её можно переименовать, дав более понятное имя.

Окружение

В этом табе отображаются переменные окружения проекта: различные параметры страницы инстанса (URL, DOM, текст, домен, текст нотификаций и алертов и т. д.), переменные времени и даты, переменные проекта (имя, папка, правила прокси, id последней ошибки и т. д.) , многочисленные переменные профиля (почта, пол, имя, юзерагент и т. д.)

В таблицах ниже описаны не только переменные из вкладки Окружение но и другие доступные системные переменные.

Переменные текущей активной вкладки
Expand
titleНажмите здесь, чтобы развернуть

Имя

Описание

{-Page.Url-}

Текущий URL страницы

{-Page.Source-}

Исходный код текущей веб-страницы

{-Page.Dom-}

DOM-модель текущей веб-страницы

{-Page.Text-}

Текст текущей веб-страницы без HTML тегов

{-Page.FullDomain-}

Полный домен текущей веб-страницы.
С учётом поддоменов.

{-Page.Domain-}

Основной домен текущей веб-страницы.
Без учёта поддоменов.

{-Page.LastAlertTitle-}

Заголовок алерта, выводимого на сайтах с помощью JS функции alert()

{-Page.LastAlertText-}

Текст алерта, выводимого на сайтах с помощью JS функции alert()

{-Page.LastNotificationTitle-}

Заголовок последнего уведомления от сайта

Речь о сообщениях, которые приходят после того, как Вы разрешаете сайту присылать Вам уведомления.

{-Page.LastNotificationText-}

Текст последнего уведомления от сайта

Речь о сообщениях, которые приходят после того, как Вы разрешаете сайту присылать Вам уведомления.

{-Page.LastDownloadedFile-}

Полный путь последнего скачанного файла

Время и дата
Expand
titleНажмите здесь, чтобы развернуть

Имя

Описание

{-TimeNow.Date-}

Текущие дата и время в формате ММ/ДД/ГГГГ чч:мм:сс (пример - 01/25/2020 14:41:18).

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

Пример: {-TimeNow.Date dd.MM.yyyy HH.mm-}, после выполнения получим такую строку - 25.01.2020 14.41

Подробнее о форматировании можно прочитать тут и тут.

{-TimeNow.Day-}

День месяца

{-TimeNow.Month-}

Текущий месяц (числом)

{-TimeNow.Year-}

Текущий год

{-TimeNow.DayOfWeek-}

День недели, на английском.

{-TimeNow.Hour-}

Текущий час (в 24 часовом формате)

{-TimeNow.Minute-}

Текущая минута

{-TimeNow.Second-}

Текущая секунда

{-TimeNow.Millisecond-}

Текущая миллисекунда

{-TimeNow.TimeNow-}

Текущие дата и время в формате ГГГГ-ММ-ДД чч-мм-сс--миллисекунды (2020-01-25 14-41-59--834)

Note

Не поддерживает форматирование!

{-TimeNow.UnixTime-}

Unix-время

Переменные проекта
Expand
titleНажмите здесь, чтобы развернуть

Имя

Описание

{-Project.BrowserProfileFolder-}

Полный путь к профиль-папке (или пустая строка, если профиль-папка не используется).

{-Project.Directory-}

Директория шаблона

{-Project.PluginDirectory-}

Директория плагина (если выполняемый шаблон - плагин)

{-Project.Name-}

Название шаблона

{-Project.Proxy-}

Текущий прокси проекта.

{-Project.ProxyRules-}

Используемое правило из ProxyChecker’a

{-Project.LastExecutedActionElapsedTime-}

Время затраченное на работу последнего выполненного экшена

{-Project.LastExecutedActionId-}

ID последнего выполненного действия

{-Project.LastErrorComment-}

Текст последнего экшена завершившегося с ошибкой

Note

Если у экшена не был задан пользовательский комментарий (ПКМ по экшену => Комментарий), то вернётся пустая строка.

Профиль
Expand
titleНажмите здесь, чтобы развернуть

Имя

Описание

{-Profile.Age-}

Возраст

{-Profile.BornDay-}

День рождения

{-Profile.BornYear-}

Год рождения

{-Profile.BornMonth-}

Месяц рождения

{-Profile.Name-}

Имя

{-Profile.Surname-}

Фамилия

{-Profile.NickName-}

Никнейм

{-Profile.Email-}

E-mail адрес

{-Profile.EmailPassword-}

Пароль от почтового ящика

{-Profile.Login-}

Логин

{-Profile.Password-}

Пароль

{-Profile.Sex-}

Пол

{-Profile.Language-}

Язык

{-Profile.Country-}

Страна

{-Profile.Town-}

Город

{-Profile.Region-}

Регион

{-Profile.ZipCode-}

Индекс

{-Profile.SecretQuestionAnswer1-}

Ответ на секретный вопрос #1

{-Profile.SecretQuestionAnswer2-}

Ответ на секретный вопрос #2

{-Profile.AvailScreenHeight-}

Высота сгенерированного экрана (за исключением панели задач)

Note

Если не включена эмуляция Screen и параметр не изменён через C# код или через экшен Операции над профилем , то будет возвращено значение 50505

{-Profile.AvailScreenWidth-}

Ширина сгенерированного экрана (за исключением панели задач)

Note

Если не включена эмуляция Screen и параметр не изменён через C# код или через экшен Операции над профилем , то будет возвращено значение 50505

{-Profile.ScreenSizeHeight-}

Высота сгенерированного экрана

Note

Если не включена эмуляция Screen и параметр не изменён через C# код или через экшен Операции над профилем , то будет возвращено значение 50505

{-Profile.ScreenSizeWidth-}

Ширина сгенерированного экрана

Note

Если не включена эмуляция Screen и параметр не изменён через C# код или через экшен Операции над профилем , то будет возвращено значение 50505

{-Profile.ScreenLeft-}

Расстояние в пикселях от левого края экрана до окна браузера.

Можно изменить с помощью экшена Операции над профилем

{-Profile.ScreenTop-}

Расстояние в пикселях от верхнего края экрана до окна браузера.

Можно изменить с помощью экшена Операции над профилем

{-Profile.OuterHeight-}

Устаревшие переменные.

{-Profile.OuterWidth-}

{-Profile.OuterHeightShift-}

{-Profile.OuterWidthShift-}

{-Profile.HTTPAccept-}

HTTP заголовок Accept
Указывает, какие типы контента, выраженные как MIME типы, клиент (браузер) может понять.

{-Profile.AcceptCharset-}

HTTP заголовок Accept-Charset
Сообщает кодировку символов, которую готов принять браузер.

{-Profile.AcceptLanguage-}

HTTP заголовок Accept-Language
Сообщает серверу обо всех языках, которые нам предпочтительны при чтении веб-страницы.

{-Profile.AcceptEncoding-}

HTTP заголовок Accept-Encoding
Перечень поддерживаемых способов кодирования содержимого сущности при передаче.

{-Profile.UserAgent-}

Строка User-Agent сгенерированного браузера

{-Profile.UserAgentAppCodeName-}

Отдельные элементы сгенерированной строки User-Agent

{-Profile.UserAgentAppName-}

{-Profile.UserAgentAppVersion-}

{-Profile.UserAgentBrowserLanguage-}

{-Profile.UserAgentCpuClass-}

{-Profile.UserAgentLanguage-}

{-Profile.UserAgentOsCpu-}

{-Profile.UserAgentPlatform-}

{-Profile.UserAgentProduct-}

{-Profile.UserAgentProductSub-}

{-Profile.None-}

Устаревшая переменная

Системные переменные (Environment)
Expand
titleНажмите здесь, чтобы развернуть

Имя

Описание

{-Environment.CurrentUser-}

ID пользователя из личного кабинета, работающего с шаблоном.

{-Environment.TickCount-}

Количество миллисекунд прошедших с момента включения компьютера.

Note

Эта переменная основана на Environment.TickCount из C#, поэтому ей присуща одна особенность: если компьютер будет долго и беспрерывно работать, то через ~24,9 дней эта переменная достигнет максимального положительного значения - 2147483647. После этого перепрыгнет к минимально возможному значению - -2147483648 и начнёт отсчёт к нулю (достигнет его через ~24,9) и т.д.

Строковые символы (String)
Expand
titleНажмите здесь, чтобы развернуть

Имя

Описание

{-String.Enter-}

Переход на новую строку

{-String.Space-}

Пробел

{-String.Tab-}

Символ табуляции

С полным списком доступных переменных окружения можно ознакомиться в статье Переменные окружения ZennoPoster

Глобальные

Обычные переменные видны только в пределах одного потока проекта (если проект работает в многопоточном режиме, то каждый поток будет иметь свою локальную, независимую переменную)

Глобальные же переменные доступны для всех проектов и их потоков в ZennoPoster.

Для того, чтобы избежать путаницы у глобальных переменных есть дополнительное свойство - Пространство имён.

Note

У ProjectMaker и ZennoPoster раздельные глобальные переменные. Иными словами изменения внесённые в глобальную переменную в PM не будут видны в ZP, и наоборот.

Json

Эти переменные также генерируются автоматически, но в процессе парсинга JSON. В режиме “Парсинг” у экшена “Обработка JSON/XML“ можно из JSON текста сразу разложить значения по автоматически созданным переменным с соответствующими узлами.

Далее в проекте можно использовать эти переменные через префикс {-Json….-}, либо в C# посредством объекта project.Json; Подробнее: Обработка JSON и XML

Xml

Переменные XML автоматически создаются в соответствующем табе после парсинга XML документа. В режиме “Парсинг” у экшена “Обработка JSON/XML“ разбираем XML, который, в свою очередь, тоже может находиться в переменной.

Также как и JSON переменные XML переменные можно использовать через префикс {-XML….-}, либо в C# через свойства объекта project.XML; Подробнее: Обработка JSON и XML

Фильтр

Открывает и закрывает поле фильтрации

Поле фильтрации

Если проект имеет большое количество переменных, то поиск нужной переменной может занимать много времени. Поэтому в окне переменных предусмотрена многофункциональная фильтрация. Каждый столбец можно отфильтровать по разному одним из 12-ти способов.

Подробнее о фильтрах можно почитать в статье описывающей Окно лога.

Очистка сортировки

Сбрасывает отсортированные переменные.

Кнопка отображается только в том случае, если переменные отсортированы по одной из колонок. Чуть подробнее о сортировке написано в абзаце про Заголовки.

Добавить

Открывает диалоговое окно в которое можно ввести имя создаваемой переменной.

Имя переменной может состоять из букв латинского алфавита, цифр и символа нижнего подчёркивания. Но обязательно должно начинаться с буквы.

Удалить

Удаляет выделенную переменную, предварительно выведя подтверждающее окно. Чтобы выделить переменную достаточно кликнуть по любому месту в строке этой переменной.

Переименовать

Выводит диалоговое окно с возможностью отредактировать имя переменной.

Быстрый доступ к переименованию - двойной клик по строке переменной в области столбца “Имя”.

Переименование доступно только для типов Свои и Глобальные.

Note

Имя переменной изменится так же во всех экшенах, где она используется!

Очистка неиспользуемых переменных

Часто в больших проектах создаются переменные, которые позднее никак не участвуют в работе шаблона. Чтобы не занимать место в памяти и визуально не занимать ценное рабочее пространство, можно периодически удалять такие переменные. ZennoPoster найдёт все неиспользуемые переменные и выведет их список с предложением удалить их. Каждую очистку необходимо делать для каждого типа переменных.

Ручная сортировка переменных (Drag & Drop)

Info

Добавлено в ZennoPoster 7.2.1.0

Вы можете расположить переменные так как Вам удобно с помощью кнопок “Вверх” и “Вниз”, либо с помощью мыши (Drag & Drop). Свой порядок работает тогда, когда выключена сортировка по столбцам (для этого нажмите на кнопку "Очистка сортировки").

Expand
titleПример

Чтобы сбросить ручную расстановку можно отсортировать переменные по одному из столбцов.

Заголовки столбцов

Одновременно служат как для фильтрации переменных, так и для сортировки. Достаточно кликнуть по заголовку столбца и произойдёт сортировка как по возрастанию имени переменной, так и по убыванию, как по возрастанию значения переменной, так и по убыванию. Повторный клик меняет направление сортировки.

Кликнув ПКМ по заголовку любого столбца появится меню в котором можно выбрать отображаемые колонки.

Колонка “Имя”

Здесь отображаются имена переменных используемых в проекте

Если дважды кликнуть по имени переменной, то появится диалоговое окно для переименования.

Note

Имена переменных регистрозависимы: Name, NAME, name - три разных переменных!

Колонка “Значение”

Выводит текущие значения переменных. Кликнув по значению выбранной переменной можно прямо в поле ввода отредактировать данные.

Колонка “Значение по-умолчанию”

Если требуется чтобы при запуске проекта переменная уже имела какое-то значение (при старте проекта все переменные пустые), то необходимо ввести в это поле нужное значение.

Переменные окружения, Json и Xml не имеют значений по умолчанию и поэтому в их представлении этот столбец отсутствует.

Колонка “Примечание”

По умолчанию данная колонка скрыта.

Можно использовать для пометок к переменным (тут можно указать для какой цели используется эта переменная)

У глобальных переменных есть дополнительный столбец с пространством имён.

Скопировать макрос переменной в буфер обмена

Быстрый способ скопировать макрос типа {-Variable.value-} кликнуть по такой иконке в строке переменной.

Контекстное меню

Кликнув ПКМ напротив переменной появится контекстное меню.

Доступно для вкладок Свои, Авто и Глобальные.

Вкладки Свои, Глобальные

Вкладка Авто


Копирование переменных из проекта в проект

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

  • Откройте старый проект.

  • Кликните правой клавишей мыши на кнопке “Переменные проекта” в “Панели Статических блоков” и нажмите “Скопировать переменные”.

  • Затем откройте новый проект и опять кликните правой клавишей мыши на кнопке “Переменные проекта” в “Панели Статических блоков” и нажмите “Вставить переменные”.

  • В появившемся окне выберите чекбоксами переменные какого типа нужно вставить в проект и подтвердите вставку переменных. Переменные копируются вместе с их значениями по умолчанию.


Работа с переменными

Макросы переменных

В ProjectMaker использовать переменные можно посредством макросов, которые имеют вид {-Variable.myVariable-}- этот макрос при исполнении проекта передаст значение переменной myVariable. Достаточно вставить макрос переменной в любое поле свойств экшена (там где это возможно) и при исполнении экшена в поле подставится значение соответствующей переменной.

У глобальных переменных нужно указать в макросе область видимости - {-GlobalVariable.someNamespace.text-}

Expand
titleОперации с переменными с помощью C# и JS экшенов

В основном переменные в ZennoPoster бывают трёх типов:

  • Числовые (0, 1, 12.652, 10500).

  • Текстовые (“Hello World“, “<div>Hello World</div>“).

  • Логические (True, False).

Производить различные операции с переменными можно как в кубике C#, так и в кубике JavaScript, но нужно иметь в виду, что в C# все переменные попадают в текстовом виде и, чтобы их конвертировать в числа или в логические переменные, потребуется конвертация или приведение в нужный тип.

Например, вот так выглядит приведение строковых переменных в C# к целочисленному (int) типу двумя разными способами, сложение их и возврат в строковую переменную для дальнейшего использования в проекте:

Для операций со строками в кубике JavaScript необходимо текстовые переменные обернуть в кавычки - '{-Variable.value1-}'

Рекомендации по именованию переменных

Старайтесь давать переменным названия по которым сразу становится понятна задача и область применения переменной. Не нужно называть переменные короткими и бессмысленными именами - f1, qwerty - этим вы значительно усложните исправление и поддержку проекта как для себя, так и для других разработчиков, которые будут иметь доступ к шаблону.
Если переменная часто используется в проекте, то желательно назвать её коротко, но понятно - counter, username, proxy.
Для названий имеющих в основе два и более слова старайтесь разделять их либо заглавной буквой (secondPassword), либо символом нижнего подчеркивания (page_html).

Это общепринятые практики, которые значительно улучшат читабельность и эффективность работы с вашим проектом.

Присвоение значения

Простейший пример использования переменных заключается в комбинации статического текста, своих переменных и переменных окружения с помощью экшена Обработка переменных.

В данном примере имя берется из переменной окружения {-Profile.Name-}, день недели из {-TimeNow.DayOfWeek-}, а возраст из своей переменной count. После запуска кубика результат сохраняется в переменной result.

Арифметические операции над числами

Используя синтаксис языка JavaScript и соответствующий кубик можно производить различные математические операции над числами.

В данном случае в переменных value1 и value2 находятся целые числа, которые нужно сложить и потом умножить на 10. Результат вычислений попадает в переменную result.

Использование переменных

Старайтесь использовать переменные вместо жёстко прописанного текста в тех местах, где значение может когда-то измениться.

В качестве примера можно привести пути файлов - на Вашем компьютере путь один, а у клиента он другой. Если необходимый файл находится в одной директории с проектом (или в одной из его поддиректорий) то хорошим решением будет использовать макрос {-Project.Directory-} - путь к директории где сохранён шаблон. Вот как может выглядеть путь - {-Project.Directory-}file.txt


Полезные ссылки