Автоматизация профилей в антидетект‑браузере через API: заметки из практики
Когда я разбирался с тонкими моментами организации безопасности при арбитраже трафика, как это часто бывает, просто рабочий проходной скрипт, который я просто написал для тестирования, превратился в отдельный проект. Пока раскручивал тему, вырисовались сразу два самостоятельных скрипта; выкладывать всё одним файлом не стал, решил отдельно расписать что получилось.
Разбирая механику арбитража, я собрал автоматический конструктор профилей для антидетект‑браузера через API. Звучит сложно, но на деле очень просто.
Итак, для начинающих (и "продвинутых начинающих") арбитражников, которые хотят работать "через API like a boss", подготовил два рабочих инструмента:
Скрипт №1 массово генерит профили: с авто‑отпечатками браузера от Octo или с вашими собственными (второй вариант требует дополнительно файл с отпечатками браузера).
Скрипт №2 стартует профили не из GUI антидетект‑браузера, а из терминала, сразу подключаясь к ним Selenium’ом. Сам запуск - это конечно мелочь, но для автоматизированного фарминга аккаунтов это может стать отправной точкой. Про сам фарминг будет отдельный лонгрид, а этот скрипт - хорошая база.
Поехали по порядку.
Зачем автоматизировать создание профилей
Работа с десятками и сотнями аккаунтов в антидетект‑браузере - это клики, формы, прокси, куки и повторение, повторение, повторение. UI может быть неплохим, но ручное создание профилей всё равно прожигает часы. Когда у вас 10–15 профилей - можно жить и так (но если скрипт уже готов, почему бы не нажать "Enter"?). Но как только счёт пошёл на сотни, скрипт экономит часы и убирает человеческие ошибки: перепутанная метка, не тот порт у прокси, забытый cookie все это не будет ошибкой, если вы используете скрипт а не рутинные действия.
Контекст мультиаккаунтинга: чем закрываем риски
Антидетект‑браузеры - маст‑хэв для задач, где легко поймать блокировку. Они поднимают изолированные профили с уникальными параметрами окружения, имитируя пул устройств и конфигураций. Параллельно можно вести сотни кабинетов или соц аккаунтов с одной машины. Партнер по связке - резидентные прокси: скрывают реальный IP и минимизируют ограничения. В этом материале я использую API Octo Browser и резидентные прокси 2prx. Почему именно Octo (потому что могу) - у меня есть платный тариф Base с доступом к API; почему именно 2prx (потому что хочу) у меня осталось несколько гигабайтов трафика (отдавать просто так жалко, а тут будет полезно). Получилось в итоге бюджетно и эффективно.
Вы можете использовать другие сервисы (но придется немного допилить скрипт), на свое усмотрение, тут просто показано на примере того, к чему у меня был реальный доступ.
Связка "резидентные проки + антидетект браузер" - золотой стандарт. Прокси маскируют сетевой слой, антик закрывает десятки параметров браузера (Canvas, WebGL, таймзона, системный язык, тип девайса и т.д.), но самое главное - даёт изолированный профиль в глазах целевого сервиса (сайта).
Задача: ускорить массовую генерацию профилей через API. Пример: нужно 100 штук, у каждой - свой фингерпринт и свой прокси. Ручками это полдня. Octo предоставляет открытое API - этим и воспользуемся.
Подготовка: API, входные данные, окружение
API‑ключ. Octo выдаёт токен в десктопном клиенте (это вообще на любителя; мне проще было бы в веб‑кабинете, чтобы не ставить на комп приложение). Токен нужен для авторизации запросов.
Прокси. Берём на 2prx с пакетной выдачей. Формируем файл proxies.csv в формате:
Cookie (опционально). Если хотите сразу импортировать сессию можно подготовить такой файл - cookies.json:
Ключи - это индексы профилей с нуля. Нет файла - шаг пропускается.
Переменные окружения - файл .env рядом со скриптами:
Зависимости:
Исходники я положил в GitHub под названием Octo Browser Profile Creator.
Скрипт №1 - массовое создание профилей через антидетект браузер Octo API
Исходники я положил в GitHub под названием Octo Browser Profile Creator.
Скрипт №1 - массовое создание профилей через антидетект браузер Octo API
Ниже - полностью рабочий код - такой же есть на Гитхабе.
Что делает этот скрипт - по шагам
Конфигурация. Тянет токен и имена файлов из .env. Нет токена - мгновенный выход с ошибкой.
CSV с прокси. Автоопределение разделителя (csv.Sniffer), ранний стоп при мусоре в данных.
JSON с cookie (если есть). Требуется объект‑словарь: ключ - индекс профиля (строка), значение - список cookie‑словарей.
Повтор прокси по кругу. itertools.cycle() позволяет создавать профилей больше, чем уникальных прокси. Риски думаю понятны: один IP на несколько профилей может палиться, поэтому рекомендую использовать уникальные прокси на каждый новый профиль при серьезных проектах.
Отпечатки браузера. Передаем только обязательное: ОС (win/mac) и экран. Остальное (~50 полей) Octo подставляет сам (можно дописать свои параметры, при желании).
POST в API. https://app.octobrowser.net/api/v2/automation/profiles, заголовок X-Octo-Api-Token, аккуратная обработка ошибок и логирование UUID.
Вывод. Консоль показывает прогресс:
После прогона профили будут видны в списке Octo: каждый привязан к своему прокси, с валидным отпечатком; если подставляли cookie - они также будут добавлены.
Скрипт №2 - старт профилей из терминала + Selenium и проверка IP
Этот мини‑инструмент вытягивает OCTO_LOCAL_PORT и OCTO_API_TOKEN из .env, принимает на вход один или несколько UUID, запускает каждый профиль через локальный API Octo, коннектится к нему по Chrome DevTools и открывает httpbin.org/ip для проверки исходящего адреса. База для старта автоматического фарминга.
Как это работает - пошагово
Настройки. load_dotenv() подтягивает OCTO_LOCAL_PORT (по умолчанию 58888) и OCTO_API_TOKEN. Сборка базового URL и заголовков.
Аргументы CLI. Вы передаёте один или несколько UUID:
Старт профиля. POST http://127.0.0.1:<PORT>/api/profiles/start с телом:
При 400 скрипт печатает ответ API, дальше - raise_for_status() для остальных ошибок. Возвращаем debug_port.
Подключение к профилю. Selenium цепляется к уже запущенному браузеру через options.add_experimental_option("debuggerAddress", "127.0.0.1:<port>"). Дальше можно управлять страницей как обычно.
Проверка IP. Переход на https://httpbin.org/ip, ожидание <pre>, чтение JSON‑ответа с исходящим адресом.
Аккуратное закрытие. finally гарантирует driver.quit().
Куда развивать дальше
Что дальше, можно ли допилить? Я подкину несколько путей развития, на мой вкус. Но делать я этого, в ближайшее время конечно не буду.
Автоматически вешать теги, складывать UUID в БД, запускать профили батчами.
Прогонять сценарии сразу после старта профиля (сеансы, прогрев, сбор метрик).
Завести очередь задач на запуск/остановку профилей и мониторинг статусов API.
Не переоптимизируйте: больше автоматики - больше точек отказа. Баланс важен.
Быстрая проверка логики (чтобы не словить банальные ошибки)
В proxies.csv тип обязателен (HTTP/HTTPS/SOCKS5), port - число.
В cookies.json корнем должен быть объект, ключи - строки индексов ("0", "1", …).
PROFILE_COUNT=0 - создаст профилей ровно по числу строк в CSV; больше - включится цикл по прокси.
Минимальный фингерпринт (os, screen) - норм; остальное Octo достраивает сам.