Private KeeperPrivate Keeper
Объект PK

Остальные методы

Все 13 методов PK для вычислений, строк, ожидания, состояния проекта, DLL, cookie и строки User-Agent с точными побочными действиями.

На этой странице собраны 13 методов, которые не образуют отдельную большую библиотеку: вычисление выражения, перемешивание строк, ожидание, идентификаторы, дата, вызов DLL, четыре операции с cookie и создание строки User-Agent. Они объединены только навигацией; состояние и ошибки у каждой группы разные.

Что выбрать

Вычислить или перемешать

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

Подождать

sleep задерживает текущее выполнение. pauseFor приостанавливает весь проект и затем продолжает его автоматически.

Изменить состояние проекта

addID и delID меняют список идентификаторов, а четыре метода cookie — плоское хранилище текущего сетевого исполнителя.

Преобразовать или вызвать

unixToDate форматирует время UTC, generateUserAgent строит строку заголовка, а dll обращается к уже загруженной внешней библиотеке.

Что возвращают методы

МетодыРезультат JavaScriptПобочное действие
math, shuffle, unixToDate, dll, generateUserAgentстроказависит от метода; dll выполняет внешний код
четыре метода cookieпереводимое подтверждение или текст ошибкипоследовательно меняют хранилище cookie
sleep, pauseFor, addID, delIDundefinedждут либо меняют состояние проекта

Не используйте результат метода с побочным действием как новое состояние. Например, PK.setCookies(...) возвращает подтверждение, а не список cookie; PK.delID(...) всегда даёт undefined, даже когда искомый идентификатор отсутствовал.

PK.math(input)

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

const result = PK.math("(15 + 10) * 2");

if (result !== "50") {
  throw new Error(`Получен неожиданный результат: ${result}`);
}

Перед вычислением метод раскрывает функции и переменные in-Line внутри input. Полный набор математических операторов и функций задаёт библиотека TMS Analytics; он приведён в официальном руководстве.

Необязательная приписка ,removechars удаляет все знаки, кроме цифр, +, -, *, /, круглых скобок, ^, , точки и запятой, а затем вычисляет остаток:

const amount = PK.math("Цена: 12.5 * 2,removechars");
// "25"

removechars способен скрыть неверный ввод

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

Неверное выражение возвращает текст ошибки вычислителя вместо числа. Запись той же операции в in-Line показана в описании MATH.

PK.shuffle(input)

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

const shuffled = PK.shuffle(`red
green
blue`);

Для двух и более строк метод разбирает текст как список Windows, затем возвращает строки с разделителем \r\n и завершающим \r\n. Пустая строка и текст из одной строки возвращаются без изменения. Поэтому сравнивайте состав строк, а не точное расположение и не исходный вид переводов строки.

shuffle не раскрывает разметку in-Line

В отличие от math, методов cookie и многих других переходников, shuffle передаёт входной текст непосредственно перемешивателю. Последовательности in-Line внутри строк остаются обычным текстом на этом шаге.

Внутренняя ошибка возвращается строкой Error: <описание>. Запись in-Line приведена в описании SHUFFLE.

Ожидание и пауза

sleep

Останавливает только текущий JavaScript-вызов. Другие параллельные выполнения проекта продолжают работать.

pauseFor

Переводит весь проект на паузу и отсчитывает срок после фактической остановки всех его потоков.

PK.sleep(time)

Ждёт указанное целое число миллисекунд в текущем выполнении и возвращает undefined.

PK.sleep(500); // примерно половина секунды

Значение 0 допустимо и сразу продолжает выполнение. Цифровая строка вроде "500" также преобразуется в целое, но ясная форма вызова — число; дробь или строка с посторонними знаками завершается ошибкой преобразования. Отрицательное целое в этой JavaScript-обёртке сейчас не создаёт задержки и не вызывает ошибку; надёжный договор — неотрицательное число.

Ожидание прерывается, если проверка состояния сообщает о паузе проекта. Метод не обещает точность таймера до миллисекунды: указанное число задаёт минимальную запрошенную задержку, а фактическое продолжение зависит от планировщика системы.

Та же область действия показана в описании SLEEP.

PK.pauseFor(milliseconds)

Приостанавливает весь выполняемый проект на целое число миллисекунд от 1 до 86400000 включительно, затем возвращает undefined.

PK.pauseFor(5000); // весь проект продолжится примерно через пять секунд

Срок начинается после того, как потоки проекта действительно перешли на паузу. Ручное продолжение, остановка, закрытие проекта, сброс или новый вызов pauseFor отменяют прежнее автоматическое продолжение. За пределами выполняемого проекта метод завершает вызов ошибкой; ноль, отрицательное число и срок больше суток также отвергаются.

Точное отличие от бессрочной ручной паузы приведено в описании PAUSEFOR.

Идентификаторы выполнения

Идентификаторы участвуют в выборе результата текущего выполнения. Методы меняют один рабочий список; отдельной копии для JavaScript-кода не создаётся.

PK.addID(ID)

Раскрывает функции и переменные in-Line внутри строки, дописывает полученный идентификатор в конец списка и возвращает undefined.

PK.addID("GOOD1");

Одинаковое значение можно добавить несколько раз: проверка уникальности не выполняется. Если список идентификаторов в данном окружении недоступен, вызов ничего не меняет и всё равно не сообщает об этом результатом.

Правила той же операции приведены в описании ADDID.

PK.unixToDate(input, dateType)

Преобразует целое число секунд от начала эпохи Unix в строку даты во времени UTC. Второй аргумент необязателен; без него используется вид dd/mm/yy.

const shortDate = PK.unixToDate("1571994528");
// "25/10/19"

const exactDate = PK.unixToDate(
  "1753172299",
  'yyyy-mm-dd"T"hh:nn:ss'
);
// "2025-07-22T08:18:19"

В обозначениях даты nn означает минуты, а mm — месяц. Полный перечень обозначений находится в официальном справочнике FormatDateTime.

Число передавайте десятичной строкой типа Int64 без окружающих пробелов. Допустимы значения от -59011459200 до 253402300799, то есть даты с 0100 по 9999 год. Собственный вид не может быть пустым или содержать |; вызов принимает ровно один либо два аргумента. Нарушение любого из этих правил вызывает исключение.

Входная строка проходит обработку in-Line до разбора. Соответствующая функция и те же границы приведены в описании UNIXTODATE.

PK.dll(name, func, params)

Находит уже загруженную DLL и вызывает экспортированную функцию. name передаётся без расширения .dll, а func должен точно совпасть с именем экспорта.

Надёжная форма JavaScript-вызова сейчас ограничена функцией без параметров:

const version = PK.dll("myLibrary", "getVersion");

Исполнитель сам добавляет к имени библиотеки .dll. Если библиотека не загружена или экспорт не найден, метод возвращает переводимый текст ошибки. Имена библиотеки и функции выбираются до раскрытия вложенной разметки in-Line и поэтому должны быть переданы буквально.

Неверный двоичный договор может завершить программу

Библиотека должна совпадать с разрядностью процесса и экспортировать функцию с соглашением stdcall. Аргументы и результат должны соответствовать указателям PChar или PWideChar в точности так, как их вызывает Private Keeper. Несовместимый договор вызова не превращается в обычную ошибку JavaScript и способен аварийно завершить процесс.

Ограничение параметров

Хотя публичная форма содержит params, JavaScript-обёртка собирает их неверно:

Передано после name и funcЧто получает вызывающая сторона
0 строкпустой список — единственная надёжная форма
1 строкапараметр отбрасывается
2 и более строкпромежуточные значения теряются; остаются пустое первое значение и последняя строка

Не вызывайте через PK.dll экспорт, которому нужны параметры. Для такого вызова используйте функцию in-Line с явным полем params и разделителем |PDEL|, предварительно проверив двоичный договор функции библиотеки. Её точная запись приведена в описании DLL.

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

Текущий запуск

Новое состояние доступно следующим действиям той же сетевой сессии. Новый или сброшенный проект начинает другую сессию.

Последовательное изменение

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

Возвращаемое значение

Метод возвращает переводимое подтверждение либо текст ошибки, но не новый список cookie. Смысл вызова находится в изменении состояния.

Область и защитные свойства полноценной cookie определены в описании cookie HTTP; методы PK намеренно используют более узкую форму.

Для добавления, замены и полной установки передавайте по одной паре на строку. В JavaScript удобнее всего использовать строку-шаблон:

const cookieInput = `session=7f3a2c
theme=dark
token=abc==`;
  • Первое = отделяет имя от значения, поэтому последующие знаки остаются частью значения: token=abc== допустима.
  • Пробелы по краям строки, имени и значения удаляются, а пустые строки пропускаются.
  • Имя и значение должны быть непустыми. Не добавляйте Cookie:, точки с запятой и свойства из ответа Set-Cookie.
  • deleteCookies принимает имена по одному на строку. Часть после первого = при удалении игнорируется.
  • Перед разбором методы раскрывают функции и переменные in-Line внутри всей входной строки.

Тот же входной договор со схемой состояния приведён в справочнике in-Line.

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

const message = PK.setCookies(`session=7f3a2c
неверная строка`);

addCookies и replaceCookies так же сохраняют успешные ранние изменения. Поэтому сначала проверьте весь подготовленный список и только потом вызывайте метод, особенно setCookies. Текст ошибки не является исключением, и сравнивать подтверждение с русской фразой для определения успеха ненадёжно из-за перевода интерфейса.

PK.generateUserAgent(input)

Принимает строку с объектом JSON, выбирает совместимое сочетание браузера, операционной системы, движка и вида устройства, затем возвращает готовую строку User-Agent. Пустой объект разрешён и означает полностью случайный совместимый выбор.

const userAgent = PK.generateUserAgent(JSON.stringify({}));

Метод только создаёт строку: он не меняет заголовок уже выполненного или будущего запроса сам по себе. Передайте результат туда, где проект формирует поле User-Agent. Назначение поля определено в описании HTTP.

Поля входного объекта

Вызов получает результат JSON.stringify(...), а не готовый объект JavaScript.

browser и browser_version

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

os и os_version

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

engine и engine_version

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

device_type и device_model

Вид устройства и необязательная известная модель. Допустимы dtDesktop, dtLaptop, dtTablet, dtMobile, dtSmartTV, dtConsole; строка dtUnknown не принимается.

chrome_version

Версия Chrome внутри строк браузеров на основе Chromium. Если поле не задано, совместимая версия выбирается для Edge, Opera, Samsung Internet, Vivaldi и YaBrowser.

exclude_browsers

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

exclude_os

Массив исключённых операционных систем с теми же требованиями к элементам.

exclude_engines

Массив исключённых движков. После всех ограничений должно остаться хотя бы одно совместимое сочетание.

user_agent_template

Собственный шаблон результата. Если поле отсутствует, используется шаблон выбранной пары «браузер + операционная система».

Все одиночные поля должны быть строками, а три поля exclude_* — массивами строк. Регистр известных названий не важен: исполнитель восстанавливает их каноническое написание из действующего набора. Перед разбором входная строка проходит обработку in-Line.

Полное описание тех же полей приведено в справочнике in-Line.

Как выбирается сочетание

Действующий набор совместимости приходит вместе с данными авторизации и может обновляться независимо от проекта. Метод сначала отбирает сочетания по заданным полям и исключениям, затем случайно выбирает одно из оставшихся; пропущенные версии и модель тоже выбираются из совместимых значений.

const userAgent = PK.generateUserAgent(JSON.stringify({}));

Повторные вызовы могут дать разные браузеры, системы, версии и модели. Сравнивать результат с одной ожидаемой строкой нельзя.

В поставляемом наборе встречаются Chrome, Firefox, Safari, Edge, Opera, Samsung Internet, UC Browser, Vivaldi, YaBrowser и Internet Explorer; Windows, macOS, Linux, Android, iOS и Tizen; Blink, Gecko, WebKit, EdgeHTML и Trident. Это не неизменный перечень: источником истины остаётся набор, полученный программой при авторизации. dtConsole распознаётся как вид устройства, но в поставляемом наборе для него нет совместимого сочетания.

Собственный шаблон

const userAgent = PK.generateUserAgent(JSON.stringify({
  browser: "Firefox",
  os: "Linux",
  user_agent_template:
    "{browser}/{browser_version} ({platform}; {engine}/{engine_version})"
}));

Доступны подстановки {browser}, {browser_version}, {os}, {os_version}, {platform}, {engine}, {engine_version}, {trident_version}, {device_model} и {chrome_version}. Неизвестная подстановка удаляется целиком, затем повторные пробелы сворачиваются в один, а края строки обрезаются.

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

Ошибки и повторные вызовы

Исключение возникает, если вход не является объектом JSON, известное свойство имеет неверный вид, объект содержит повторное имя, массив исключений содержит не строку или пустую строку, название отсутствует в действующем наборе либо после ограничений не осталось совместимого сочетания.

Неизвестное свойство молча игнорируется

Опечатка вроде {"browzer":"Chrome"} не ограничит выбор и может вернуть любой браузер. Используйте только перечисленные поля и проверяйте их написание до вызова.

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