Лайфхаки BAS

Pinned Moved LifeHacks
  • @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

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

  • Управление количеством потоков.

    На случай, если кому то нужно управлять количеством потоков во время работы скрипта, я создал пример реализации управления количеством потоков из текстового файла с использованием модуля "Асинхронный вызов функции":

    support600.gif

    Скрипт

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

    function _sa(id)
    {
    log(id)
       ScriptWorker.SetCurrentAction(id)
    }
    

    После этого когда в лог начинают выводиться id всех выполняемых действий. Потом можно однозначно прочесть последовательность всего произошедшего. Помогало мне жесткие баги отлавливать.
    Лучше включать только для дебага! (если действий много в скрипте).

    @romanbiz, я так понимаю, что это твой пункт 6 "по-умному".

    В новых версия использование этого кода приводит к тому, что скрипт невозможно запустить после остановки редактирования.
    Скрипт не запускается не в режиме записи, не в режиме запуска. Более того, у кого-то удаляется большая часть действий скрипта.
    Для тех, кто столкнулся с проблемой - ищите в бэкапах версию скрипта, в которую вы не вносили эту функцию.

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

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

    function _sa(id)
    {
    log(id)
       ScriptWorker.SetCurrentAction(id)
    }
    

    После этого когда в лог начинают выводиться id всех выполняемых действий. Потом можно однозначно прочесть последовательность всего произошедшего. Помогало мне жесткие баги отлавливать.
    Лучше включать только для дебага! (если действий много в скрипте).

    @romanbiz, я так понимаю, что это твой пункт 6 "по-умному".

    В новых версия использование этого кода приводит к тому, что скрипт невозможно запустить после остановки редактирования.
    Скрипт не запускается не в режиме записи, не в режиме запуска. Более того, у кого-то удаляется большая часть действий скрипта.
    Для тех, кто столкнулся с проблемой - ищите в бэкапах версию скрипта, в которую вы не вносили эту функцию.

    Я сам периодически эту функцию использую в некоторых скриптах, ни разу не было с ней проблем. Только функцию нужно вынести в переменную, что бы она не переопределялась обратно после некоторых действий (например после действия "загрузить")

    _sa = function(id)
    {
        log(id)
        ScriptWorker.SetCurrentAction(id)
    }
    

    Тестовый скрипт 493.xml

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

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

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

    function _sa(id)
    {
    log(id)
       ScriptWorker.SetCurrentAction(id)
    }
    

    После этого когда в лог начинают выводиться id всех выполняемых действий. Потом можно однозначно прочесть последовательность всего произошедшего. Помогало мне жесткие баги отлавливать.
    Лучше включать только для дебага! (если действий много в скрипте).

    @romanbiz, я так понимаю, что это твой пункт 6 "по-умному".

    В новых версия использование этого кода приводит к тому, что скрипт невозможно запустить после остановки редактирования.
    Скрипт не запускается не в режиме записи, не в режиме запуска. Более того, у кого-то удаляется большая часть действий скрипта.
    Для тех, кто столкнулся с проблемой - ищите в бэкапах версию скрипта, в которую вы не вносили эту функцию.

    Я сам периодически эту функцию использую в некоторых скриптах, ни разу не было с ней проблем. Только функцию нужно вынести в переменную, что бы она не переопределялась обратно после некоторых действий (например после действия "загрузить")

    _sa = function(id)
    {
        log(id)
        ScriptWorker.SetCurrentAction(id)
    }
    

    Тестовый скрипт 493.xml

    благодарю
    в таком виде данная функция проблем не вызвала

  • Сделал небольшой js скрипт, который перехватывает на сайте все копирования сразу в переменную в обход буфера обмена

    Вставить в действие "Выполнять при каждой загрузке страницы в браузере":

    window.copyText;
    document.addEventListener("copy", function (e) {    
        copyText = e.target.value;
        e.preventDefault();
    });
    

    После того как вы на сайте скопировали текст, вставьте в действие "Яваскрипт":

    copyText
    

    и вы получите скопированный текст в переменную

  • Сегодня узнал о существовании метода BAS для определения имени файла лога Logger.GetFileName() :D

    На случай, если кому то будет необходимо, использовать в действии "выполнить код":

    [[FILE_NAME]] =  Logger.GetFileName()
    
  • @Fox said in Лайфхаки BAS:

    Сегодня узнал о существовании метода BAS для определения имени файла лога Logger.GetFileName() :D

    На случай, если кому то будет необходимо, использовать в действии "выполнить код":

    [[FILE_NAME]] =  Logger.GetFileName()
    

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

    Теперь можно просто получить путь и открыть сразу

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

    [[FILE_NAME]] = Logger.GetFileName()

    а еще его можно очистить с помощью

    Logger.Clear()
    

    Или указать свой путь для записи лога

    Logger.SetFileName("C:/project/new_log.txt")
    

    Но меня больше интересует, как можно писать в лог удаленно? есть какое-то апи?

    upd:

    Вот нашел возможность писать в лог

    Logger.Write('test')
    

    Как бы это использовать удаленно? через командную строку, запись файла или как-то ещё.

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

    Как бы это использовать удаленно? через командную строку, запись файла или как-то ещё.

    Удалённо точно ни как не получится использовать

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

    Удалённо точно ни как не получится использовать

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

  • @UserTrue

    С помощью бас запускаю веб сервер на локалке, на котором в цикле крутится скрипт PHP, вот мне нужно из этого скрипта отстукивать в лог. Вчера ковырял дебаг бас, который запускается в хром, работает на веб сокете и все его действия транслируются в лог программы. По всей видимости как-то можно использовать удаленный лог. Есть конечно и костыльный вариант, писать в файл с помощью пхп, а в ассинхронной функции бас читать этот файл и выводить в лог, но это уже крайний вариант

  • Не знаю подходящий ли раздел для лайфахака ведь он не косвенно относится к басу... но пусть будет)
    В очередной раз полез чистить бэкапы проектов которые бас создает автоматически.
    Screenshot_2.png
    Решил в этот раз поставить и на свой пк очистку от старых файлов с помощью простых cmd команд.
    Возможно на форуме уже выкладывали, но думаю не лишнем будет закинуть и сюда.
    Данный набор скриптов использую на всех серверах, с помощью него очищаю старые логи баса, логи nodejs, уменьшать размер профилей и прочее.

    CMD команды: Можно использовать в bat скрипте и через планировщик выполнять каждый заданный промежуток времени:

    Удаляет по маске *debug.txt

    Del /S /Q "C:\Soft\"*debug.txt
    
    Del /S /Q "C:\Soft\"*node_log.txt
    

    Удаляет все файлы старше 30 дней. Я использовал для удаления временных картинок.

    chcp 1251
    echo Y | ForFiles /p "C:\Soft\Poster\Files\downloadimage\black2" /s /d -30 /c "cmd /c del @file"
    echo Y | ForFiles /p "C:\Soft\Poster\Files\downloadimage" /s /d -30 /c "cmd /c del @file"
    

    И по аналогии удаляются логи старше 3х дней

    chcp 1251
    echo Y | ForFiles /p "C:\Soft\Bots 1\appsremote\Bots\logs" /s /d -3 /c "cmd /c del @file"
    echo Y | ForFiles /p "C:\Soft\main\appsremote\Bots\logs" /s /d -3 /c "cmd /c del @file"
    echo Y | ForFiles /p "C:\Soft\Poster\Poster\appsremote\PinterestPoster\logs" /s /d -3 /c "cmd /c del @file"
    echo Y | ForFiles /p "C:\Soft\FeedCreater\appsremote\FeedCreater\logs" /s /d -3 /c "cmd /c del @file"
    

    Для уменьшения размера профилей баса. Удаляет папку Cache во всех профилях в папке D:\Profile\allprofile. В моих случаях не сказывалось на работоспособности авторизаций на сайтах.

    @echo on
    cd /d "D:\Profile\allprofile"
    for /r %%i in ("Cache") do (
     if exist "%%i" rd /s /q "%%i"
    )
    

    тоже самое но для папки Service Worker

    FOR /R "D:\Profile\profile 16" %%G in (.) DO (
     Pushd %%G
     Echo now in %%G
     for /f "delims=" %%a in ('dir /b *Worker* ') do  rd /s /q "%%~dpnxa"
     Popd )
    

    Вы могли заметить что для удаления файлов по возрасту используется forfiles.
    forfiles - это программная утилита для Microsoft Windows, которая выбирает файлы и запускает на них команду. Критерии выбора файла включают имя и дату последнего изменения.

    forfiles.exe должен находиться в папке откуда выполняется команда. Загружать exe сюда не стал т.к. virustotal ругается на Malicious.moderate.ml.score.
    Насчет удаления кэша из папок профилей - может плохо работать на медленных или битых дисках. На всех серверах с SSD работает адекватно.

    Аккуратно с удалением файлов по времени изменения! Удаляет все файлы, фильтруйте если нужно работать лишь с определёнными, либо как я - указываю полный путь к папкам где лежат логи.

    Если Forfiles не срабатывает то пробуйте поменять параметры например так:

    echo Y | ForFiles /p "C:\Users\venom\AppData\Roaming\BrowserAutomationStudio\projectbackups" -s -m *.* -d -14 -c "cmd /c del /q @path"
    
  • Есть несколько интересных функций, о которых мог кто-то не знать. Делюсь, вдруг кому пригодится:

    directory_of('F:\\Text\\api.txt'); /* returns `F:/Text` */
    
    filename_of('F:\\Text\\api.txt'); /* returns `api.txt` */
    
    _user_data_folder(); /* returns `C:/Users/USERNAME/AppData/Local` */
    
  • Немного костыльный способ найти путь к вашему модулю, это пригодится для разработчиков модулей в которых используются доп файлы, чтобы в скомпилированном скрипте ваш код мог найти нужные файлы без лишних копирований.

    moduleFolder.xml

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

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

    0_1563099815733_BasCookieToChromeEditThisCookie.xml

    Привет, сейчас не работает.
    У кого-то есть готовое решение ?