Остальные методы
Все 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, delID | undefined | ждут либо меняют состояние проекта |
Не используйте результат метода с побочным действием как новое состояние. Например, PK.setCookies(...) возвращает подтверждение, а не список cookie; PK.delID(...) всегда даёт undefined, даже когда искомый идентификатор отсутствовал.
PK.math(input)
Удаляет обычные пробелы, вычисляет математическое выражение и возвращает результат строкой с точкой как дробным разделителем.
Перед вычислением метод раскрывает функции и переменные in-Line внутри input. Полный набор математических операторов и функций задаёт библиотека TMS Analytics; он приведён в .
Необязательная приписка ,removechars удаляет все знаки, кроме цифр, +, -, *, /, круглых скобок, ^, √, точки и запятой, а затем вычисляет остаток:
removechars способен скрыть неверный ввод
Очистка также удаляет имена математических функций и неожиданные буквы. Применяйте её только к источнику, чей договор разрешает отбросить подпись вроде Цена:; иначе опечатка может превратиться в другое допустимое выражение.
Неверное выражение возвращает текст ошибки вычислителя вместо числа. Запись той же операции в in-Line показана в .
PK.shuffle(input)
Случайно меняет порядок строк, сохраняя их содержимое и количество. Повторы остаются повторами, а исходный порядок тоже может случайно сохраниться.
Для двух и более строк метод разбирает текст как список Windows, затем возвращает строки с разделителем \r\n и завершающим \r\n. Пустая строка и текст из одной строки возвращаются без изменения. Поэтому сравнивайте состав строк, а не точное расположение и не исходный вид переводов строки.
shuffle не раскрывает разметку in-Line
В отличие от math, методов cookie и многих других переходников, shuffle передаёт входной текст непосредственно перемешивателю. Последовательности in-Line внутри строк остаются обычным текстом на этом шаге.
Внутренняя ошибка возвращается строкой Error: <описание>. Запись in-Line приведена в .
Ожидание и пауза
sleep
Останавливает только текущий JavaScript-вызов. Другие параллельные выполнения проекта продолжают работать.
pauseFor
Переводит весь проект на паузу и отсчитывает срок после фактической остановки всех его потоков.
PK.sleep(time)
Ждёт указанное целое число миллисекунд в текущем выполнении и возвращает undefined.
Значение 0 допустимо и сразу продолжает выполнение. Цифровая строка вроде "500" также преобразуется в целое, но ясная форма вызова — число; дробь или строка с посторонними знаками завершается ошибкой преобразования. Отрицательное целое в этой JavaScript-обёртке сейчас не создаёт задержки и не вызывает ошибку; надёжный договор — неотрицательное число.
Ожидание прерывается, если проверка состояния сообщает о паузе проекта. Метод не обещает точность таймера до миллисекунды: указанное число задаёт минимальную запрошенную задержку, а фактическое продолжение зависит от планировщика системы.
Та же область действия показана в .
PK.pauseFor(milliseconds)
Приостанавливает весь выполняемый проект на целое число миллисекунд от 1 до 86400000 включительно, затем возвращает undefined.
Срок начинается после того, как потоки проекта действительно перешли на паузу. Ручное продолжение, остановка, закрытие проекта, сброс или новый вызов pauseFor отменяют прежнее автоматическое продолжение. За пределами выполняемого проекта метод завершает вызов ошибкой; ноль, отрицательное число и срок больше суток также отвергаются.
Точное отличие от бессрочной ручной паузы приведено в .
Идентификаторы выполнения
Идентификаторы участвуют в выборе результата текущего выполнения. Методы меняют один рабочий список; отдельной копии для JavaScript-кода не создаётся.
PK.addID(ID)
Раскрывает функции и переменные in-Line внутри строки, дописывает полученный идентификатор в конец списка и возвращает undefined.
Одинаковое значение можно добавить несколько раз: проверка уникальности не выполняется. Если список идентификаторов в данном окружении недоступен, вызов ничего не меняет и всё равно не сообщает об этом результатом.
Правила той же операции приведены в .
PK.unixToDate(input, dateType)
Преобразует целое число секунд от начала эпохи Unix в строку даты во времени UTC. Второй аргумент необязателен; без него используется вид dd/mm/yy.
В обозначениях даты nn означает минуты, а mm — месяц. Полный перечень обозначений находится в .
Число передавайте десятичной строкой типа Int64 без окружающих пробелов. Допустимы значения от -59011459200 до 253402300799, то есть даты с 0100 по 9999 год. Собственный вид не может быть пустым или содержать |; вызов принимает ровно один либо два аргумента. Нарушение любого из этих правил вызывает исключение.
Входная строка проходит обработку in-Line до разбора. Соответствующая функция и те же границы приведены в .
PK.dll(name, func, params)
Находит уже загруженную DLL и вызывает экспортированную функцию. name передаётся без расширения .dll, а func должен точно совпасть с именем экспорта.
Надёжная форма JavaScript-вызова сейчас ограничена функцией без параметров:
Исполнитель сам добавляет к имени библиотеки .dll. Если библиотека не загружена или экспорт не найден, метод возвращает переводимый текст ошибки. Имена библиотеки и функции выбираются до раскрытия вложенной разметки in-Line и поэтому должны быть переданы буквально.
Неверный двоичный договор может завершить программу
Библиотека должна совпадать с разрядностью процесса и экспортировать функцию с соглашением stdcall. Аргументы и результат должны соответствовать указателям PChar или PWideChar в точности так, как их вызывает Private Keeper. Несовместимый договор вызова не превращается в обычную ошибку JavaScript и способен аварийно завершить процесс.
Ограничение параметров
Хотя публичная форма содержит params, JavaScript-обёртка собирает их неверно:
Передано после name и func | Что получает вызывающая сторона |
|---|---|
| 0 строк | пустой список — единственная надёжная форма |
| 1 строка | параметр отбрасывается |
| 2 и более строк | промежуточные значения теряются; остаются пустое первое значение и последняя строка |
Не вызывайте через PK.dll экспорт, которому нужны параметры. Для такого вызова используйте функцию in-Line с явным полем params и разделителем |PDEL|, предварительно проверив двоичный договор функции библиотеки. Её точная запись приведена в .
Cookie текущей сетевой сессии
Четыре метода работают с плоским списком имя=значение текущего сетевого исполнителя. Изменение применяется к следующим запросам этой сессии, но не переписывает уже полученный ответ и не является локальной переменной Скрипт-бокса.
Новое состояние доступно следующим действиям той же сетевой сессии. Новый или сброшенный проект начинает другую сессию.
Строки применяются сверху вниз. Ошибка поздней строки не отменяет пары, которые уже были добавлены, заменены или удалены.
Метод возвращает переводимое подтверждение либо текст ошибки, но не новый список cookie. Смысл вызова находится в изменении состояния.
Хранилище содержит только пару имя=значение
Здесь нельзя задать Domain, Path, Expires, Max-Age, Secure, HttpOnly или SameSite. Не передавайте строку Set-Cookie целиком: служебные части станут фрагментом значения. После ручного изменения сведения о браузерных свойствах считаются неполными.
Область и защитные свойства полноценной cookie определены в ; методы PK намеренно используют более узкую форму.
Форма входной строки
Для добавления, замены и полной установки передавайте по одной паре на строку. В JavaScript удобнее всего использовать строку-шаблон:
- Первое
=отделяет имя от значения, поэтому последующие знаки остаются частью значения:token=abc==допустима. - Пробелы по краям строки, имени и значения удаляются, а пустые строки пропускаются.
- Имя и значение должны быть непустыми. Не добавляйте
Cookie:, точки с запятой и свойства из ответаSet-Cookie. deleteCookiesпринимает имена по одному на строку. Часть после первого=при удалении игнорируется.- Перед разбором методы раскрывают функции и переменные in-Line внутри всей входной строки.
Тот же входной договор со схемой состояния приведён в .
Частично применённые изменения
Обработка не является единым неделимым действием. В следующем примере прежний список уже очищен, первая пара уже добавлена, а затем метод возвращает обычный текст ошибки о второй строке:
addCookies и replaceCookies так же сохраняют успешные ранние изменения. Поэтому сначала проверьте весь подготовленный список и только потом вызывайте метод, особенно setCookies. Текст ошибки не является исключением, и сравнивать подтверждение с русской фразой для определения успеха ненадёжно из-за перевода интерфейса.
Одинаковые имена создают неоднозначный запрос
Серверы могут по-разному понимать несколько пар с одним именем, а порядок не должен определять смысл. Если требуется одно значение на имя, создайте окончательный список без повторов и передайте его в setCookies.
PK.generateUserAgent(input)
Принимает строку с объектом JSON, выбирает совместимое сочетание браузера, операционной системы, движка и вида устройства, затем возвращает готовую строку User-Agent. Пустой объект разрешён и означает полностью случайный совместимый выбор.
Метод только создаёт строку: он не меняет заголовок уже выполненного или будущего запроса сам по себе. Передайте результат туда, где проект формирует поле User-Agent. Назначение поля определено в .
Поля входного объекта
Вызов получает результат JSON.stringify(...), а не готовый объект JavaScript.
Название браузера и необязательная версия. Явная версия вставляется буквально и не сверяется со списком версий выбранного браузера.
Операционная система и необязательная версия. В итоговой версии каждый знак _ заменяется точкой.
Движок участвует в проверке совместимости. Явно переданная версия движка вставляется без отдельной проверки.
Вид устройства и необязательная известная модель. Допустимы dtDesktop, dtLaptop, dtTablet, dtMobile, dtSmartTV, dtConsole; строка dtUnknown не принимается.
Версия Chrome внутри строк браузеров на основе Chromium. Если поле не задано, совместимая версия выбирается для Edge, Opera, Samsung Internet, Vivaldi и YaBrowser.
Массив названий браузеров, которые нельзя выбирать. Каждый элемент должен быть непустой строкой из действующего набора.
Массив исключённых операционных систем с теми же требованиями к элементам.
Массив исключённых движков. После всех ограничений должно остаться хотя бы одно совместимое сочетание.
Собственный шаблон результата. Если поле отсутствует, используется шаблон выбранной пары «браузер + операционная система».
Все одиночные поля должны быть строками, а три поля exclude_* — массивами строк. Регистр известных названий не важен: исполнитель восстанавливает их каноническое написание из действующего набора. Перед разбором входная строка проходит обработку in-Line.
Полное описание тех же полей приведено в .
Как выбирается сочетание
Действующий набор совместимости приходит вместе с данными авторизации и может обновляться независимо от проекта. Метод сначала отбирает сочетания по заданным полям и исключениям, затем случайно выбирает одно из оставшихся; пропущенные версии и модель тоже выбираются из совместимых значений.
Повторные вызовы могут дать разные браузеры, системы, версии и модели. Сравнивать результат с одной ожидаемой строкой нельзя.
В поставляемом наборе встречаются 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 распознаётся как вид устройства, но в поставляемом наборе для него нет совместимого сочетания.
Собственный шаблон
Доступны подстановки {browser}, {browser_version}, {os}, {os_version}, {platform}, {engine}, {engine_version}, {trident_version}, {device_model} и {chrome_version}. Неизвестная подстановка удаляется целиком, затем повторные пробелы сворачиваются в один, а края строки обрезаются.
Правила подстановок и пример результата приведены в .
Ошибки и повторные вызовы
Исключение возникает, если вход не является объектом JSON, известное свойство имеет неверный вид, объект содержит повторное имя, массив исключений содержит не строку или пустую строку, название отсутствует в действующем наборе либо после ограничений не осталось совместимого сочетания.
Неизвестное свойство молча игнорируется
Опечатка вроде {"browzer":"Chrome"} не ограничит выбор и может вернуть любой браузер. Используйте только перечисленные поля и проверяйте их написание до вызова.
Если несколько запросов должны иметь одинаковую строку, вызовите метод один раз и повторно используйте сохранённый результат. Каждый новый вызов заново выполняет случайный выбор. Дополнительные причины ошибок разобраны в .