Базару 0, инфа добрая. Хотя про аварийные ситуации уже не ваша должна быть проблема... Главное чтобы программа после перезапуска работала стабильно, остальное уж не стоит брать во внимание как по мне. Еще тест на чистую машину тоже хз, обычно софты на дедиках запускают, а там каждый хостинг сам выбирает что блочить и как работать, так что..
Лайфхаки BAS
-
-
@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); }И через обычный блок лога вы сможете выводить лог сразу в ваш файл
-
@qusav1n said in Лайфхаки BAS:
@Fox моя функция после компиляции скидывается после любого браузерного действия, ты не шаришь как это обойти?
Используй глобальные переменные js
-
@qusav1n said in Лайфхаки BAS:
Не понимаю, как реализовать? Можешь подробнее пояснить решение
getActionId = function() { return "[" + ScriptWorker.GetCurrentAction() + "]"; } 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 + ']'; }; wrapLog = function(msg) { return getActionId() + ' ' + getTime() + ' [Thread #' + thread_number() + '] ' + msg; } 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 -
-