Как держать и обновлять пул открытых и настроенных браузеров, ожидающих задание.

Поддержка
  • Всем привет.

    У меня реализован проект, состоящий из трех функций:

    Функция #1 — Main: поднимает Express-сервер на выделенном порту (API). Принимает входящие запросы (задания) и при их поступлении инициирует выполнение функции #2.

    Функция #2 — Worker: получает параметры из задания (прокси, URL, ID). На основе этих параметров выполняется настройка прокси, подбор отпечатка браузера (fingerprint) и запуск браузера, в котором открывается целевая ссылка.

    Функция #3 — Callback: получает данные, обработанные функцией #2, и возвращает результат клиенту.

    Проект работает стабильно, однако есть узкое место: проверка прокси, получение отпечатка и запуск браузера занимают значительно больше времени, чем непосредственное открытие страницы и сбор данных.

    Задача: хотелось бы реализовать пул предварительно запущенных браузеров с настроенными прокси и отпечатками, которые находятся в режиме ожидания. При поступлении задания браузер из пула получает URL, открывает его, выполняет необходимые действия и завершает сессию. После завершения браузер закрывается, а на его место автоматически запускается новый экземпляр с обновленными параметрами (прокси/fingerprint), который снова переходит в режим ожидания.

    Вопрос: реализуемо ли подобное решение в принципе? Т.е. часть функционала из функции #2 перенести в новую функцию, которая будет отвечать за предварительную настройку браузера и его запуск. Так же мониторить и поддерживать кол-во запущенных браузеров. Функцию #2 оставить только для открытия ссылки и получения данных со страницы.

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

  • @Automator у бас есть библиотеки для работы с браузером напрямую в nodes, python,c# . Там это не составит проблем, у меня такое работает. Если писать в самом БАС наверное тоже можно придумать какие-то костыли но я отошёл от этого )

  • @usertrue, благодарю за отклик. Библиотеки - это py-bas-automation / bas-remote-node / bas-remote-python / basremote net?)

  • @Automator said in Как держать и обновлять пул открытых и настроенных браузеров, ожидающих задание.:

    @usertrue, благодарю за отклик. Библиотеки - это py-bas-automation / bas-remote-node / bas-remote-python / basremote net?)

    Да

  • @usertrue, еще раз спасибо. По кастомизации явно на голову выше при работе с библиотеками, а в плане анонимности/безопасности не будет уступать работе через BAS?

  • @Automator said in Как держать и обновлять пул открытых и настроенных браузеров, ожидающих задание.:

    @usertrue, еще раз спасибо. По кастомизации явно на голову выше при работе с библиотеками, а в плане анонимности/безопасности не будет уступать работе через BAS?

    Так это и есть бас. Единственное там браузер плохо обновляют. Лично я сдлал fork и сам обновляю

  • @usertrue said in Как держать и обновлять пул открытых и настроенных браузеров, ожидающих задание.:

    Лично я сдлал fork и сам обновляю

    Если не разберусь как напрямую в BASe реализовать то перейду на эту сторону))

  • @usertrue его задача изначально не так решается, человек увидел проблему и хочет бредовый костыль.

  • @FastSpace, буду признателен за любые подсказки. В рамках BAS пока удалось реализовать только подобный костыльный подход))
    Ранее я уже реализовывал аналогичное самописное решение на стеке Octo + Playwright + Docker + CDP, но для текущей задачи это избыточно как с точки зрения инфраструктуры, так и по затратам. Поэтому начал изучать альтернативные варианты. Текущий проект на BAS уже закрывает 80% требуемого функционала. Осталось реализовать механизм "горячих" профилей и будет хорошо)

  • @Automator said in Как держать и обновлять пул открытых и настроенных браузеров, ожидающих задание.:

    буду признателен за любые подсказки

    Посмотри как сделан под капотом https://github.com/bablosoft/browser-with-fingerprints/blob/master/project.xml.

    Программа на BAS следит в цикле за файликами в папке, как только они появляются, скрипт(на BAS) их парсит и выполняет. Это очень простая и надежная логика.

    Можно ее перенести и на твой скрипт, не надо "мудрить" с запуском Node.js локально c API, особенно если это сделано во внутри BAS.

    Если уже очень хочется иметь API, то лучше делать его рядом на чем угодно, а этот API будет складывать файлики в заданиями в папочку, а скрипт на BAS оттуда их брать.

  • @sergerdn, благодарю за отклик. Изучу. И за либу (py-bas-automation) благодарность) Сейчас изучаю репо.

  • @Automator said in Как держать и обновлять пул открытых и настроенных браузеров, ожидающих задание.:

    И за либу (py-bas-automation)

    Это НЕ production ready проект, а демонстрация pof.

  • @Automator проблема

    проверка прокси, получение отпечатка и запуск браузера
    
    1. Проверку проксю можно ускорить, там не сложно. Поковырять немного type script
    2. Отпечатки можно выкачать заранее. Я из своей базы их получаю за 0.1 сек.
    3. С запуск браузера надо городить, но тоже решается.
  • Всем кто откликнулся большое спасибо.
    Удалось добить эти недостающие 20% в проекте BASa. Теперь задача выполняется ~5 секунд (было ~30 секунд).
    Но действительно проще кодом сразу начинать... Все равно большая часть функционала через кубик - кастом код.

    @FastSpace said in Как держать и обновлять пул открытых и настроенных браузеров, ожидающих задание.:

    Отпечатки можно выкачать заранее. Я из своей базы их получаю за 0.1 сек.

    Добавил такое) Все задачи которые прошли валидацию сохраняют отпечатки в файл. Позже добавлю отправку в supabase а не файл и уже буду их использовать.

  • 0 Votes
    4 Posts
    440 Views
  • 0 Votes
    4 Posts
    591 Views
  • 0 Votes
    6 Posts
    711 Views
  • 0 Votes
    5 Posts
    1307 Views
  • 0 Votes
    14 Posts
    4803 Views