Базару 0, инфа добрая. Хотя про аварийные ситуации уже не ваша должна быть проблема... Главное чтобы программа после перезапуска работала стабильно, остальное уж не стоит брать во внимание как по мне. Еще тест на чистую машину тоже хз, обычно софты на дедиках запускают, а там каждый хостинг сам выбирает что блочить и как работать, так что..
Лайфхаки BAS
-
This post is deleted!
-
Установка модулей для nodejs прямо из nodejs xD
Возможно будет полезным, если модуль не устанавливается штатно -
Выше человек хотел перебрать большой массив на JS. Вот статья, человек сравнил кучу виду циклов на JS.
https://gist.github.com/DungGramer/7efdfefecaa1b8f5d6510202524dc751Самый быстрый - перебрать большой массив JS без NodeJS. Результат следующий (выводы из статьи)
Массив до 100 элементов
Лучший способ: --while forward: 0.01289999857544899msМассив 1000 элементов
Лучший способ:: pop: 0.0018000006675720215msМассив 10000 элементов и далее
Лучший способ:: pop: 0.0018000006675720215msУскорил свои циклы и перебор массивов для консольных команд на 40%+
-
@tet-vivi в BAS одинаково с Chrome +-. Chromium движок же
В какой среде он запускал - я хер знает. Наверно обычная консоль хрома, судя по командам console.log. В любом случае классический старый способ i = 0, array.length, i++ для 67 элементов в BAS выдал результат медленнее существенно.
-
@FastSpace said in Лайфхаки BAS:
В какой среде он запускал - я хер знает. Наверно обычная консоль хрома,
В nodejs, но в nodejs тот же движок V8, что и в chrome
-
-
@Antonio said in Лайфхаки BAS:
function _sa(id)
{
log(id)
ScriptWorker.SetCurrentAction(id)
}После этого скрипта не открывается мой проект, другие открываются
-
@RoselieDesa said in Лайфхаки BAS:
@Antonio said in Лайфхаки BAS:
function _sa(id)
{
log(id)
ScriptWorker.SetCurrentAction(id)
}После этого скрипта не открывается мой проект, другие открываются
Прочитайте тему целиком, я уже описывал причину
-
Добавлю здесь, что бы не потерять: Кликабельные ссылки из лога BAS
-
Пример подключения к уже запущенному браузеру БАС через puppeteer (nodejs)
Полезно для нормального перехвата и изменения запросов, генерация pdf и хз для чего еще ))Example of connecting to an already running BAS browser via puppeteer (nodejs)
Useful for normal interception and modification of requests, pdf generation and for something else )) -
Вход в твитер по токену.
Вставлять в функцию 'Загрузить cookies'{"cookies":[{"domain":".twitter.com","expires":1704067200,"httpOnly": false,"name":"auth_token","path":"/","priority":"Medium","sameParty":false,"secure":false,"session":false,"size":50,"sourcePort":80,"sourceScheme":"NonSecure","value":"[[TOKEN]]"}]}expires - выставлять на пару месяцев от текущей даты.
-
@hvrsh said in Лайфхаки BAS:
Вход в твитер по токену.
Вставлять в функцию 'Загрузить cookies'{"cookies":[{"domain":".twitter.com","expires":1704067200,"httpOnly": false,"name":"auth_token","path":"/","priority":"Medium","sameParty":false,"secure":false,"session":false,"size":50,"sourcePort":80,"sourceScheme":"NonSecure","value":"[[TOKEN]]"}]}expires - выставлять на пару месяцев от текущей даты.
Этот способ будет работать до 1 января 2024 года
:DЧто бы работало дольше, нужно будет увеличить значение даты в unixtime в ключе "expires" -
@Fox ну я уточнил что под себя нужно это менять. Там вроде на пол года только можно масимум посавить, и да, это должно быть первым кубиком так как функция перезаписывает кук всего браузера, поему ведь не сделать добавление по доменам... это же не сложно дложно быть.
-
Делюсь nodejs кодом для одноименного кубика в BAS.
Требуется предварительно установить в бас nmp пакет socksv5
Запуск его приводит к развертыванию на компе socks5 прокси , этот прокси сервер можно юзать как свой личный прокси.
Авторизация по логину и паролю, в коде они указаны , можете те что вы хотите.
Прокси открывается на рандомном свободном порту.
Порт подключения к проксю будет сохранен в [[PORT]].
Ip поднятого сервера - сами определите это не хитро сделать!Код:
const socks = require('socksv5'); const net = require('net'); const auth = { login: 'qwerty123', password: 'aqwesdfg222' }; const srv = socks.createServer(function(info, accept, deny) { accept(); }); // Аутентификация srv.useAuth(socks.auth.UserPassword(function(user, password, cb) { if (user === auth.login && password === auth.password) { cb(true); } else { cb(false); } })); // Поиск свободного порта и запуск SOCKS сервера const server = net.createServer(); server.listen(0, () => { const port = server.address().port; server.close(() => { srv.listen(port, '0.0.0.0', function() { [[PORT]] = port; console.log(`SOCKS5 прокси сервер запущен на порту: ${port}`); }); }); });Следующий nodejs кубик отроет порт из [[PORT]] для внешних подключений на компе где запустился только что прокси-сервер, это выполняется создание правила в брандмауэре винды:
const { exec } = require('child_process'); // Указанный порт для правила брандмауэра const port = [[PORT]]; const ruleName = `OpenPort${port}`; console.log(`Начинаем добавление правила в брандмауэр для порта ${port}.`); // Команда для добавления правила в брандмауэр const command = `netsh advfirewall firewall add rule name="${ruleName}" dir=in action=allow protocol=TCP localport=${port}`; // Выполнение команды для открытия порта exec(command, (error, stdout, stderr) => { if (error) { console.error(`Ошибка при добавлении правила в брандмауэр: ${error}`); return; } if (stderr) { console.error(`Ошибка в выводе команды: ${stderr}`); return; } console.log(`Правило для порта ${port} успешно добавлено в брандмауэр с именем '${ruleName}'.`); console.log(stdout); });Этот код останавливает работу прокси сервера. Нужно выполнять в среде cmd\bat , например в басе этот тут: Управление Процессами>Запустить Процесс
Код:netstat -ano | findstr [[PORT]] -
Логирование каждого пука баса в тхт попоточно.
модернизировал уже бывалый на форуме кусок кода который делал это в лог._sa = function (id) { ScriptWorker.SetCurrentAction(id); native("filesystem", "writefile", JSON.stringify({path: VAR_PROJECT_DIRECTORY + "/log/" + VAR_DATE_NOW + "/thread_" + VAR_THREAD_INDEX + ".txt",value: (id).toString() + "\r\n",base64:false,append:true})); }
Это ставить в OnApplicationStart
Это в main или в любую другую функцию что вызывается многопоточно. -
Может кому то пригодится. Задался вопросом, как менять значение ресурсов, выставленные пользователем заранее в настройках, непосредственно при работе алгоритма. Прокатит, конечно не со всеми типами ресурсов, типа рандомного числа (иначе придется дополнительные костыли писать). Пример для ресурса типа fixedstring:

Результат лога:
[575755268] [21:14:32] Поток №1 : Текст
[341096640] [21:14:33] Поток №1 : Текст
[313945351] [21:14:38] Поток №1 : Текст
[106131420] [21:14:40] Поток №1 : 123
[73431582] [21:14:49] Поток №1 : 123Параметр "notreuse", при обращении к вновь созданному ресурсу, будет выдавать - уже новое значение.
Значение в Actual конфиге конечно не изменит, но изменит на лету для текущей работы скрипта.
PS Во многопотоке не проверял.
PPS Конечно, можно взять ресурс и передать глобальной переменной значение и с ней уже работать, но задача стояла именно изменить значение ресурса "на лету". -
M Moderator moved this topic from Off topic on
-
Решил поделится своей функцией которая позваляет класть логи в определенную папку
Вам достаточно установить глобальную переменную LOGS_FILE_TXT перед выполнением этого кода в OnApplicationStartvar getActionId = function() { return "[" + ScriptWorker.GetCurrentAction() + "]"; } var getTime = function(){ var checkTime = function(i) { return (i < 10) ? ("0" + i) : i; }; var d = new Date(); var hh = checkTime(d.getHours()); var mm = checkTime(d.getMinutes()); var ss = checkTime(d.getSeconds()); return '[' + hh + ':' + mm + ':' + ss + ']'; }; var wrapLog = function(msg) { return getActionId() + ' ' + getTime() + ' [Thread #' + thread_number() + '] ' + msg; } var writeLogToFile = function(msg) { var wrappedMsg = wrapLog(msg); native("filesystem", "writefile", JSON.stringify({path: JSON.parse(P("basglobal", "LOGS_FILE_TXT") || '""'), value: (wrappedMsg).toString() + "\r\n", base64:false, append:true})); } original_log_fn = log; log = function(msg) { original_log_fn(msg); writeLogToFile(msg); }И через обычный блок лога вы сможете выводить лог сразу в ваш файл
-
-
Section Rules
Pinned Locked LifeHacks -
Правила Раздела
Pinned Locked LifeHacks -
-
