Private KeeperPrivate Keeper
in-Line Kit

Основы языка in-Line

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

in-Line Kit читает специальные записи непосредственно из полей проекта. Чтобы выражение было предсказуемым, сначала определите источник данных, затем форму переменной и только после этого добавляйте функции или условия.

Порядок обработки

1. Разделите входную строку

Маска превращает одну строку в |VALUE|[1], |VALUE|[2] и последующие значения. Если маска проекту не нужна, этот шаг пропускается.

2. Прочитайте текущее состояние

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

3. Преобразуйте данные

Функции изменяют вложенную строку. Например, (|UPPER||LOGIN||UPPER|) переводит текущий логин в верхний регистр.

4. Проверьте условие

Логический оператор сравнивает два значения. Несколько сравнений соединяются через |AND| или |OR| и при необходимости группируются круглыми скобками.

Переменная не ищет данные «где-нибудь в проекте». Она читает состояние в момент выполнения текущего поля. Поэтому результат парсера доступен только после работы этого парсера, а сведения о сетевой попытке — после соответствующего запроса.

Переменные

У переменных есть три основные формы записи.

Без параметра

|LOGIN| возвращает одно текущее значение.

По номеру

|PARS|[2] возвращает результат с номером 2.

По имени

|DV|[Token] возвращает динамическую переменную Token.

Правило 1. Номер пишется в квадратных скобках

Работает

|PARS|[1] однозначно указывает первый обычный парсер.

Ошибка

|PARS| не указывает, результат какого парсера нужно вернуть.

Правило 2. Имя находится внутри одной пары скобок

Работает

|DV|[SessionToken] читает динамическую переменную SessionToken.

Ошибка

|DV|SessionToken не соответствует форме именованной переменной.

Правило 3. Значение должно уже существовать

Работает

После выполнения первого парсера |PARS|[1] читает его результат.

Ошибка

Чтение |CUSTOMCYCLEVALUE| вне активной итерации |CUSTOMCYCLE| завершается явной ошибкой.

Результаты парсеров и циклов

  • |PARS|[n] — результат обычного парсера с номером n.
  • |REGEX|[n] — результат парсера по регулярному выражению с номером n.
  • |REGEXCYCLE|[n] — значение с номером n из циклических результатов парсера по регулярному выражению.
  • |PARSCYCLE|[n] — результат обычного парсера в циклическом запросе.
  • |REGEXCOUNT|[n] — количество строк в результате парсера по регулярному выражению с номером n.
  • |REGEXGLUE|[1, | ,2, \ ,3] — склеивает результаты нескольких регулярных выражений, помещая указанные разделители между ними.
  • |SIMPLEGLUE|[1, Пароль - |PWD|] — склеивает результат обычного парсера с указанным текстом или переменной.
  • |CYCLE|[1-9] — создаёт циклический запрос по целому диапазону от 1 до 9.
  • |CUSTOMCYCLE|[...] — создаёт цикл по значениям, введённым пользователем в динамической настройке.
  • |CUSTOMCYCLEVALUE| — текущее значение активной итерации |CUSTOMCYCLE|; доступно в адресе, заголовках, данных запроса и Скрипт-боксе.

Пример пользовательского цикла с запятой как разделителем:

https://example.test/?item=|CUSTOMCYCLE|[|DYNAMICSTR|(Список значений)|DL|(разделитель для значений),]

Здесь |DYNAMICSTR| выбирает настройку «Список значений», а |DL| задаёт запятую как разделитель. При значении настройки one,two цикл выполнит две итерации; |CUSTOMCYCLEVALUE| вернёт сначала one, затем two.

Входная строка

Пусть первое входное значение равно [email protected], а второе — secret:

  • |VALUE|[1] — первая часть строки после применения маски;
  • |VALUE|[2] — вторая часть строки после применения маски;
  • |LOGIN|[email protected];
  • |PWD|secret;
  • |LOGIN|D| — доменная часть логина, example.com;
  • |LOGIN|ND| — логин без доменной части, alice.

|VALUE|[n] описывает положение в маске, а |LOGIN| и |PWD| обозначают назначение первых входных значений. Используйте |VALUE|[n], когда строка содержит больше двух частей или её поля имеют другое назначение.

Прокси и сетевой запрос

  • |IP| — адрес текущего прокси-сервера.
  • |PORT| — порт текущего прокси-сервера.
  • |PROXYTYPE| — тип соединения с прокси-сервером.
  • |PROXY| — полная строка ip:port:user:password|type.
  • |PROXYLOGIN| — имя пользователя прокси-сервера.
  • |PROXYPWD| — пароль прокси-сервера.
  • |PROXYURI| — строка вида protocol://user:password@ip:port.
  • |REDIRECT| — адрес последнего перехода, выполненного запросом.
  • |REDIRECTHISTORY|[1] — исходный адрес запроса; [2] — первый выполненный переход, далее номера идут по порядку.
  • |USERAGENT| — текущая строка пользовательского агента.

История переходов является многострочным списком. Если код находится в Скрипт-боксе JavaScript, то же состояние доступно как массив PK.redirectHistory.

Данные проекта

  • |RANDOMSTRING|[n] — результат с номером n, ранее созданный функцией |RANDOM|.
  • |DV|[name] — значение существующей динамической переменной name.
  • |SB|[name] — содержимое динамической переменной name, которое нужно выполнить как часть кода Скрипт-бокса.
Обычные данные

|DV|[SharedCode] вставляет содержимое переменной как текст.

Код Скрипт-бокса

|SB|[SharedCode] подключает содержимое той же переменной как исполняемый фрагмент Скрипт-бокса.

Маска входной строки

Маска определяет, как одна входная строка делится на |VALUE|[1], |VALUE|[2] и последующие части.

Маска:   |VALUE|[ || ]|VALUE|
Строка:  [email protected] || password123

Результат:
|VALUE|[1] = [email protected]
|VALUE|[2] = password123

Правило 1. Составной разделитель заключается в скобки

Всё внутри [...] считается одним точным разделителем.

Работает

Маска |VALUE|[ -> ]|VALUE| разбирает строку first -> second.

Ошибка

Маска |VALUE| -> |VALUE| содержит многосимвольный разделитель без квадратных скобок.

Правило 2. Скобки принадлежат маске, а не входной строке

Работает

Маска |VALUE|[ || ]|VALUE|, строка login || password.

Ошибка

Строка login[ || ]password ошибочно содержит служебные скобки маски.

Правило 3. Пробелы являются частью разделителя

Работает

Разделителю [ || ] соответствует строка login || password с пробелами с обеих сторон.

Ошибка

Строка login||password не содержит точную последовательность пробел + || + пробел.

Правило 4. Односимвольный разделитель можно записать двумя способами

Работает

|VALUE|:|VALUE| сохраняет прежнюю короткую форму; |VALUE|[:]|VALUE| явно задаёт точный символ :.

Ошибка

|VALUE|[]|VALUE| задаёт пустой разделитель, а |VALUE|[::|VALUE| не закрывает квадратную скобку.

Определения

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

  • |RESPONSE| — тело ответа сервера.
  • |HEADERS| — заголовки ответа сервера.
  • |COOKIES| — сохранённые cookie.
  • |NETWORKOUTCOME| — результат попытки: not_run, success или transport_error.
  • |NETWORKERRORKIND| — вид ошибки: none, dns_failure, timeout, connection_reset, connection_refused, tls_failure или other.
  • |NETWORKERRORCODE| — числовой код сетевой библиотеки.
  • |NETWORKERRORMESSAGE| — техническое сообщение сетевой библиотеки.
  • |ALLOTHER| — все ответы, которые не совпали с остальными правилами; применяется только в определении плохого запроса.
  • |ID|name| — идентификатор определения, например |ID|blocked-response|.

При not_run и success вид ошибки равен none, код — 0, а сообщение пустое. При transport_error вид принимает одно из шести значений ошибки, код сохраняет исходную диагностику сетевой библиотеки, а сообщение содержит технический текст.

Для ветвления используйте |NETWORKOUTCOME|, |NETWORKERRORKIND| или |NETWORKERRORCODE|. Техническое сообщение предназначено для диагностики и может меняться, поэтому условие проекта не должно распознавать причину ошибки по его словам.

Работает

|NETWORKOUTCOME||=|transport_error проверяет структурированный результат сетевой попытки.

Ошибка

Сравнение |NETWORKERRORMESSAGE| с ожидаемой фразой привязывает логику к изменчивому диагностическому тексту.

Полный пример сохраняет диагностику только при транспортной ошибке:

#beginScript
|||NETWORKOUTCOME||=|transport_error
|DV|[NetworkFailure] = |NETWORKERRORKIND| (|NETWORKERRORCODE|): |NETWORKERRORMESSAGE|
||END
#endScript

Динамическая переменная NetworkFailure должна существовать в проекте до выполнения этого кода.

Логические операторы

Логическое выражение возвращает истину или ложь. Левая и правая части сначала получают текущие значения, затем между ними применяется оператор.

Сравнение

  • |>|, |<|, |>=|, |<=| — числовые сравнения.
  • |=| — равенство чисел или строк.
  • |<>| — неравенство чисел или строк.
  • |pos>0| — левая подстрока найдена в правой строке.
  • |pos=0| — левая подстрока не найдена в правой строке.
Работает

2|>|1 возвращает истину; @mail.ru|pos>0|[email protected] тоже возвращает истину.

Ошибка

abc|>|1 передаёт строку числовому сравнению; [email protected]|pos>0|@mail.ru меняет местами искомую подстроку и строку поиска.

Соединение условий

  • |AND| возвращает истину, только если истинны оба соседних блока.
  • |OR| возвращает истину, если истинен хотя бы один соседний блок.
Работает

1|>|2|OR|2|>|1 возвращает истину, потому что второй блок истинен.

Ошибка

1|>|2|OR|2 не содержит полного сравнения справа от |OR|.

Группировка и буквальные скобки

Обычные круглые скобки задают порядок вычисления сложного условия. Если скобка должна стать частью текста внутри функции, используйте |LFNC| для ( и |RFNC| для ).

Группировка

(login1|pos>0|[email protected]|OR|login2|pos>0|[email protected])|AND|mail.ru|pos>0|[email protected] возвращает истину.

Буквальный текст

(|UPPER|status|LFNC|ok|RFNC||UPPER|) возвращает STATUS(OK).

Работает

|LFNC| и |RFNC| явно сообщают, что скобки являются данными функции.

Ошибка

Неэкранированные круглые скобки внутри такой строки могут быть приняты за управляющую группировку.

Условный вывод

|DOLOGIC|условие|ENDLOGIC|текст|DOLOGIC| добавляет текст в результат только при истинном условии.

|DOLOGIC|Чекер|pos>0||METHOD||ENDLOGIC|Баланс - |PARS|[1]|DOLOGIC|

Если динамическая настройка |METHOD| содержит подстроку Чекер, в результат добавляется Баланс - и значение первого парсера.

Работает

Запись содержит начало |DOLOGIC|, границу |ENDLOGIC| и завершающий |DOLOGIC|.

Ошибка

Без |ENDLOGIC| интерпретатор не может отделить условие от выводимого текста.

История результатов

  • |LLR|[n] возвращает сохранённый логический результат с номером n как True или False.
  • |LNS| запрещает сохранять результат текущего выражения в историю.
  • |THIS| возвращает текущий парсер внутри логического правила парсера.
  • |DV|[logicField] может содержать целое логическое выражение; интерпретатор рекурсивно выполнит его как условие.

Определения не добавляют результаты в |LLR|.

Работает

1|>|2|OR|2|>|1|LNS| вычисляется, но не занимает место в истории.

Ошибка

Чтение |LLR|[1] в расчёте на результат определения неверно: определения в эту историю не записываются.

Логические блоки

В выражении 1|>|2|OR|2|>|1 находятся два логических блока: 1|>|2 и 2|>|1. Оператор |OR| соединяет их, но каждый блок остаётся самостоятельным сравнением.

В определениях доступны две дополнительные команды:

  • |USEAG| указывает, что при совпадении проверяемого значения нужно использовать модуль распознавания капчи;
  • |AGREPORT| указывает, что при неверно распознанной капче нужно отправить жалобу в выбранную службу.
Работает

|USEAG| или |AGREPORT| находится внутри соответствующего определения, где известны проверяемое значение и действие модуля.

Ошибка

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

Линейный блок Скрипт-бокса начинается с || и заканчивается ||END. Его порядок выполнения, присваивание и вложенные условия подробно разобраны на странице Скрипт-бокс.