Базару 0, инфа добрая. Хотя про аварийные ситуации уже не ваша должна быть проблема... Главное чтобы программа после перезапуска работала стабильно, остальное уж не стоит брать во внимание как по мне. Еще тест на чистую машину тоже хз, обычно софты на дедиках запускают, а там каждый хостинг сам выбирает что блочить и как работать, так что..
Лайфхаки BAS
-
@Fox перебрав кучу генераторов html таблиц нашел лучший, https://www.tablesgenerator.com/html_tables рекомендую только его, делать в гугл таблицах а потом конвертировать хуже (проверено на личном опыте) там и код сразу копируешь без изменений)
-
@fluffik said in Лайфхаки BAS:
@Fox перебрав кучу генераторов html таблиц нашел лучший, https://www.tablesgenerator.com/html_tables рекомендую только его, делать в гугл таблицах а потом конвертировать хуже (проверено на личном опыте) там и код сразу копируешь без изменений)
Не думаю что это подходит под тему лайфхак БАС
-
Пауза в любой точки скрипта
Создаете ресурс с названием "Pause" тип "Из файла" выбираете пустой файл
В начало скрипта добавляете действие "Выполнить код" с содержимымfunction wait(milliseconds) { var start = new Date().getTime(); for (var i = 0; i < 1e7; i++) { if ((new Date().getTime() - start) > milliseconds){ break; } } } function _sa() { var pause = native("filesystem", "readfile", JSON.stringify({value: RInfo("Pause","Location"),base64:false,from:0,to:0})); if(pause.length != 0){ for (var i = 0; i < 1e7; i++) { var pause = native("filesystem", "readfile", JSON.stringify({value: RInfo("Pause","Location"),base64:false,from:0,to:0})); if(pause.length == 0){break;} wait(1000); } } }Если файл выбранный в ресурсе "Pause" содержит символы будет пауза
Чтобы продолжить работу скрипта нужно очистить файлТестовый скрипт
pause.xml -
@GamiD said in Лайфхаки BAS:
Пауза в любой точки скрипта
Создаете ресурс с названием "Pause" тип "Из файла" выбираете пустой файл
В начало скрипта добавляете действие "Выполнить код" с содержимымfunction wait(milliseconds) { var start = new Date().getTime(); for (var i = 0; i < 1e7; i++) { if ((new Date().getTime() - start) > milliseconds){ break; } } } function _sa() { var pause = native("filesystem", "readfile", JSON.stringify({value: RInfo("Pause","Location"),base64:false,from:0,to:0})); if(pause.length != 0){ for (var i = 0; i < 1e7; i++) { var pause = native("filesystem", "readfile", JSON.stringify({value: RInfo("Pause","Location"),base64:false,from:0,to:0})); if(pause.length == 0){break;} wait(1000); } } }Если файл выбранный в ресурсе "Pause" содержит символы будет пауза
Чтобы продолжить работу скрипта нужно очистить файлТестовый скрипт
pause.xmlИдея хорошая, как оказалось ты её реализовал ещё до того, как я об этом написал
:D
Но давай по порядку:- Объявление локальной функции в функции main приведёт к ошибке при вызове этой локальной функции из другой функции BAS. Для наглядности - тестовый скрипт
- Переопределяя функцию
_sa()не нужно было удалять рабочий код самой функции
ScriptWorker.SetCurrentAction(id)это может привезти к непредсказуемым багам и ошибкам
3. Переопределённая функция_sa()вернётся в исходное состояние после любого браузерного действия


Тестовый скриптфункция wait это отдельный кошмар
- Для чего в ней цикл на 10 000 000 итераций? (да 1e7, это число 10 000 000) Ведь для использования этого кода, как функцию задержки цикл for не подходит, например если указать время wait(100000), то все итерации завершатся быстрее, чем пройдёт указанное время.
- Условие
new Date().getTime() - start) > millisecondsявляется дико ресурсоёмким, так как в секунду происходит очень много итераций и выполнения кода. Можно запросто забить процессор на 100% в 2-3 потока с таким ожиданием. Лучше использовать асинхронный код ожидания или метод sleep() в BAS, но функцию тогда нужно будет оформить для работы с асинхронными методами BAS. - Для чего в функции
_sa()цикл с ожиданием? Эта функция будет вызываться передкаждымдействием BAS и так как функция не асинхронная, итерпретатор будет ждать, пока цикл из 10 000 000 итераций с секундной задержкой закончится прежде чем выполнитькаждоедействие (на выполнение первого действия в скрипте уйдёт чуть больше 115 дней) - Сама логика читать файл после каждого действия BAS тоже не очень хорошая идея. Каждый поток, после каждого действия в скрипте будет читать файл, винт вам не скажет спасибо. Лучше было ограничить чтение файла одним или несколькими потоками с записью данных в глобальную переменную.
-
@Fox Делал все на скорую руку=) я знал что кто ни будь в любом случае исправит мои ошибки и поставит вариант по лучше=)
А на счет ожидания я не придумал вариант лучше, встроенное действие "Спать" не заработала внутри действия "Выполнить код"
Мне интересно посмотреть на другой вариант где все мои действия упрощены -
@GamiD said in Лайфхаки BAS:
@Fox Делал все на скорую руку=) я знал что кто ни будь в любом случае исправит мои ошибки и поставит вариант по лучше=)
А на счет ожидания я не придумал вариант лучше, встроенное действие "Спать" не заработала внутри действия "Выполнить код"
Мне интересно посмотреть на другой вариант где все мои действия упрощеныЛады, думаю завтра накидаю вариант
-
@kroda said in Лайфхаки BAS:
@Fox said in Лайфхаки BAS:
Лады, думаю завтра накидаю вариант
9 days ago...
Я попробовал накидать на следующий же день, но не вышло сходу сделать человеческое ожидание, а потом на меня наложили волшебное заклинание и стало не до этого
:D
https://community.bablosoft.com/topic/10945/не-отправляет-куку-или-почему-запрос-не-присылает-то-что-я-хочу/6 -
Грубый хак, который убирает надпись ожидание элемента. Этот код надо выполнить через действие "выполнить код", где-то вначале скрипта, до браузерных действий.
without_waiting.xml -
@GamiD said in Лайфхаки BAS:
Конвертор BAS Cookie для Google Chrome расширения EditThisCookie
Проверял на mail.ru, facebook.com и еще на нескольких сайтах возможно есть сайты на которых не будет работатьЕсть обратный конвертер кук?
Из обычного текстового формата в БАС, со всеми параметрами. -
@BeerMaster вот
LogCookieToBASCookie.xml
Конвертирует cookie из логов

-
Не знаю или сюда относить или в другое место , но у меня возникал потребность настроить разгадывание какпчи под разные сервисы в том числе и под капмонстер для которого нужно вводить урл сервера если он на другом сервере находится. Так вот использовал для уникализации прописания переменных тернарный оператор , удобно и один кубик выполняет поставленную задачу для всех сервисов.
скрин прилагаю. Тернарник работает как для рекапчи так и для простых капч.
-
-
@m1st поддерживаю прогресс бар дальше 1го не идет
-
This post is deleted!
-
Если машина не оч сильная, или скрипт большой - вообщем если в записи при редактировании скрипта система слегка подвисает, лучше кубики на редактирование открывать не двойным кликом (потому что бас по каким то причинам его помимо открытия копирует в место где стоит курсор - потом в запуске ловим ошибки), а нажатием правой кнопки мыши и "редактировать",
-
Есть небольшой лайфхак, что бы действие "Спать" могло выполнить значение меньше 1000мс (без использования ноды)


Нужно прописать в файл
settings.ini\BrowserAutomationStudio\apps\23.1.1\settings.iniпараметр
MultiTimerTimeoutзначение100или любое другое меньше1000Пример файла settings.ini
Но если события мультитаймера будут происходить очень часто, это сильно снизит производительность (очень низкие значения лучше не ставить)
-
Управление количеством потоков.
На случай, если кому то нужно управлять количеством потоков во время работы скрипта, я создал пример реализации управления количеством потоков из текстового файла с использованием модуля "Асинхронный вызов функции":

-
-
Section Rules
Pinned Locked LifeHacks -
Правила Раздела
Pinned Locked LifeHacks -
-