Лайфхаки BAS

Pinned Moved LifeHacks
  • @GamiD said in Лайфхаки BAS:

    Конвертор BAS Cookie для Google Chrome расширения EditThisCookie
    Проверял на mail.ru, facebook.com и еще на нескольких сайтах возможно есть сайты на которых не будет работать

    0_1563099815733_BasCookieToChromeEditThisCookie.xml

    Дружище, ты лучший. Я редко когда оствляю каменты чтобы не засорять флудом форум. Просто плюсую карму. Но тут просто не возможно пройти мимо и не сказать лично спасибо.

  • This post is deleted!
  • @Fox перебрав кучу генераторов html таблиц нашел лучший, https://www.tablesgenerator.com/html_tables рекомендую только его, делать в гугл таблицах а потом конвертировать хуже (проверено на личном опыте) там и код сразу копируешь без изменений)

  • @fluffik said in Лайфхаки BAS:

    @Fox перебрав кучу генераторов html таблиц нашел лучший, https://www.tablesgenerator.com/html_tables рекомендую только его, делать в гугл таблицах а потом конвертировать хуже (проверено на личном опыте) там и код сразу копируешь без изменений)

    Не думаю что это подходит под тему лайфхак БАС

  • @UserTrue это дополнение к посту фокса про таблицы, я как раз этим лайфхаком воспользовался и нормальный html генератор таблицы это боль)

  • Пауза в любой точки скрипта
    Создаете ресурс с названием "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
    Но давай по порядку:

    1. Объявление локальной функции в функции main приведёт к ошибке при вызове этой локальной функции из другой функции BAS. Для наглядности - тестовый скрипт
    2. Переопределяя функцию _sa() не нужно было удалять рабочий код самой функции
    ScriptWorker.SetCurrentAction(id)
    

    это может привезти к непредсказуемым багам и ошибкам
    3. Переопределённая функция _sa() вернётся в исходное состояние после любого браузерного действия
    239162f5-7596-45b2-8dca-401bc5887cb6-изображение.png
    938d0192-5896-4a5d-a51b-b79f142b74ba-изображение.png
    Тестовый скрипт

    функция wait это отдельный кошмар

    1. Для чего в ней цикл на 10 000 000 итераций? (да 1e7, это число 10 000 000) Ведь для использования этого кода, как функцию задержки цикл for не подходит, например если указать время wait(100000), то все итерации завершатся быстрее, чем пройдёт указанное время.
    2. Условие new Date().getTime() - start) > milliseconds является дико ресурсоёмким, так как в секунду происходит очень много итераций и выполнения кода. Можно запросто забить процессор на 100% в 2-3 потока с таким ожиданием. Лучше использовать асинхронный код ожидания или метод sleep() в BAS, но функцию тогда нужно будет оформить для работы с асинхронными методами BAS.
    3. Для чего в функции _sa() цикл с ожиданием? Эта функция будет вызываться перед каждым действием BAS и так как функция не асинхронная, итерпретатор будет ждать, пока цикл из 10 000 000 итераций с секундной задержкой закончится прежде чем выполнить каждое действие (на выполнение первого действия в скрипте уйдёт чуть больше 115 дней)
    4. Сама логика читать файл после каждого действия BAS тоже не очень хорошая идея. Каждый поток, после каждого действия в скрипте будет читать файл, винт вам не скажет спасибо. Лучше было ограничить чтение файла одним или несколькими потоками с записью данных в глобальную переменную.
  • @Fox Делал все на скорую руку=) я знал что кто ни будь в любом случае исправит мои ошибки и поставит вариант по лучше=)
    А на счет ожидания я не придумал вариант лучше, встроенное действие "Спать" не заработала внутри действия "Выполнить код"
    Мне интересно посмотреть на другой вариант где все мои действия упрощены

  • @GamiD said in Лайфхаки BAS:

    @Fox Делал все на скорую руку=) я знал что кто ни будь в любом случае исправит мои ошибки и поставит вариант по лучше=)
    А на счет ожидания я не придумал вариант лучше, встроенное действие "Спать" не заработала внутри действия "Выполнить код"
    Мне интересно посмотреть на другой вариант где все мои действия упрощены

    Лады, думаю завтра накидаю вариант

  • @Fox said in Лайфхаки BAS:

    Лады, думаю завтра накидаю вариант

    9 days ago...

  • @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 и еще на нескольких сайтах возможно есть сайты на которых не будет работать

    0_1563099815733_BasCookieToChromeEditThisCookie.xml

    Есть обратный конвертер кук?
    Из обычного текстового формата в БАС, со всеми параметрами.

  • @BeerMaster вот
    LogCookieToBASCookie.xml
    Конвертирует cookie из логов
    fa33ff7b-7167-4672-8d4a-71373f6556f1-image.png

  • Не знаю или сюда относить или в другое место , но у меня возникал потребность настроить разгадывание какпчи под разные сервисы в том числе и под капмонстер для которого нужно вводить урл сервера если он на другом сервере находится. Так вот использовал для уникализации прописания переменных тернарный оператор , удобно и один кубик выполняет поставленную задачу для всех сервисов.
    скрин прилагаю. Тернарник работает как для рекапчи так и для простых капч.

    alt text

  • @Fox said in Лайфхаки BAS:

    PROGRESS

    @support Прогресс бар перестал работать

  • @m1st поддерживаю прогресс бар дальше 1го не идет

  • This post is deleted!
  • Если машина не оч сильная, или скрипт большой - вообщем если в записи при редактировании скрипта система слегка подвисает, лучше кубики на редактирование открывать не двойным кликом (потому что бас по каким то причинам его помимо открытия копирует в место где стоит курсор - потом в запуске ловим ошибки), а нажатием правой кнопки мыши и "редактировать",

  • Есть небольшой лайфхак, что бы действие "Спать" могло выполнить значение меньше 1000мс (без использования ноды)

    d993025a-a813-4caf-99eb-ce0403a17d5a-изображение.png

    support528.gif

    Нужно прописать в файл settings.ini

    \BrowserAutomationStudio\apps\23.1.1\settings.ini
    

    параметр MultiTimerTimeout значение 100 или любое другое меньше 1000

    Пример файла settings.ini

    Но если события мультитаймера будут происходить очень часто, это сильно снизит производительность (очень низкие значения лучше не ставить)