Основы языка 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|; доступно в адресе, заголовках, данных запроса и Скрипт-боксе.
Пример пользовательского цикла с запятой как разделителем:
Здесь |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] и последующие части.
Правило 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| с ожидаемой фразой привязывает логику к изменчивому диагностическому тексту.
Полный пример сохраняет диагностику только при транспортной ошибке:
Динамическая переменная 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| добавляет текст в результат только при истинном условии.
Если динамическая настройка |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. Его порядок выполнения, присваивание и вложенные условия подробно разобраны на странице Скрипт-бокс.