- Регистрация
- 06.02.2017
- Сообщения
- 158
- Благодарностей
- 472
- Баллы
- 63
В данной статье мы рассмотрим полный цикл создания собственного расширения для Chrome — от разработки логики скрипта до его практического применения в системе автоматизации.
Я опишу, как собрать скрипт, преобразовать его в расширение, упаковать, подключить к ZennoBrowser и управлять его запуском с помощью ZennoPoster.
Основная цель — добиться максимально нативной автоматизации, при которой выполнение логики происходит непосредственно внутри браузера и визуально не отличается от действий реального пользователя.
Использование скриптов в виде расширения браузера — это более безопасный и устойчивый подход к автоматизации по сравнению с классическими шаблонами ZennoPoster.
Он позволяет минимизировать следы автоматизации, обходить поведенческие и fingerprint-фильтры, выстраивать сложную логику внутри браузера, использовать ZennoPoster как управляющий центр, а не источник действий.
К этой идее я пришёл достаточно давно, но практическая возможность реализовать её появилась лишь в ходе последних разработок и обновлений ZennoBrowser и ZennoPoster.
На данный момент я только в начале этого пути. Тем не менее, я надеюсь, что данное направление окажется интересным для нашего комьюнити, и со временем мы сможем развить его совместными усилиями.
С каждым днём целевые ресурсы усиливают свои системы защиты, и задача их обхода становится всё более сложной, поэтому поиск новых, более эффективных и устойчивых подходов к автоматизации сегодня особенно актуален.
Суть подхода заключается в следующем: мы создаём расширение для Chrome и подключаем его к профилям ZennoBrowser через систему пресетов.
В само расширение закладывается вся логика и алгоритмы, которые ранее использовались в шаблонах ZennoPoster.
При этом возможны два сценария — либо изначально разрабатывать алгоритм в виде полноценного шаблона, а затем конвертировать его в расширение, либо сразу проектировать логику с прицелом на работу внутри браузера.
1. Создание Chrome Extension.
Для примера я взял самый простой шаблон для фарминга аккаунтов X.COM(TWITTER).
Расширение автоматически запускается при запуске профиля как непосредственно из ZennoBrowser так и командами по API из Zennoposter.
Весь цикл запуска и работы расширения более подробно показан в видео.
Создание расширения начинается с шаблона, предварительно собранного в Project Maker.
На этом этапе вся логика реализуется либо сразу на C#, либо с использованием стандартных кубиков с последующей конвертацией в C#.
Далее наша задача — объединить весь шаблон в единый скрипт, тщательно его протестировать и отработать как штатные, так и не штатные сценарии, чтобы на этапе сборки расширения не возвращаться к доработкам.
Поскольку у меня уже был опыт разработки расширений, я изначально пытался реализовать универсальный конвертер из C# в JavaScript непосредственно внутри Project Maker.
Однако на практике стало понятно, что сделать такое решение универсальным не получается — под каждый проект и под каждую логику требуется отдельная реализация.
Поэтому, не усложняя процесс, я решил воспользоваться ChatGPT.
Нужный результат был получен не сразу — потребовалось время, чтобы «натренировать» модель и добиться корректной генерации кода.
Тем не менее, в конечном итоге задача была решена, и результат полностью оправдал ожидания.
Вот собственно те 4 файла необходимые нам для сборки собственного расширения.
Коротко про файлы - для чего нужны и их содержание.
manifest.json - это основной конфигурационный файл расширения.
В нём описывается структура расширения, указываются его имя, версия, разрешения, а также какие скрипты и файлы используются.
Именно манифест сообщает браузеру, какие компоненты нужно загрузить, какие API разрешены и как расширение должно себя вести.
Именно здесь - "js": ["utils.js", "content.js"] записывается последовательность запуска скриптов в расширении.
utils.js - файл утилит содержит вспомогательную логику и общие функции.
Здесь обычно размещаются методы для работы с таймингами, логированием, обработкой данных, ожиданием элементов и другие универсальные инструменты, которые используются в разных частях расширения.
Этот файл позволяет не дублировать код и выносить общую логику в одно место.
content.js - скрипт отвечает за прямое взаимодействие со страницей.
Он выполняется в контексте сайта, имеет доступ к DOM-дереву, может отслеживать события, эмулировать действия пользователя и работать с элементами интерфейса.
Именно в этом файле, как правило, реализуется основная логика автоматизации и поведения на целевом ресурсе.
background.js -скрипт отвечает за фоновую логику расширения.
Он управляет состоянием расширения, обрабатывает события браузера, взаимодействует с API Chrome и координирует работу между различными частями расширения.
В нашем случае бэкграунд используется для переходов по ссылкам и управления навигацией, поскольку при попытке выполнять такие действия напрямую из контент-скрипта страница не загружается корректно, а лишь «мигает».
Бэкграунд позволяет выполнять навигацию корректно, без нарушения загрузки страницы и без конфликтов с контекстом сайта.
Для того чтобы запаковать в расширение мы используем следующий скрипт:
Скрипт создания расширения Chrome:
string chromePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
string extPath = @"C:\Users\Ваша директория проекта\Extension";
var psi = new System.Diagnostics.ProcessStartInfo();
psi.FileName = chromePath;
psi.Arguments = $"--pack-extension=\"{extPath}\"";
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
var proc = System.Diagnostics.Process.Start(psi);
proc.WaitForExit();
1. Extension.crx - непосредственно само расширение, которое мы и загружаем в наш браузер.
2. Extension.pem - приватный ключ разработчика.
Вот так выглядит работа нашего расширения консоли разработчика и результат в окне браузера.
2. Интеграция с Zennoposter.
Поскольку весь основной функционал шаблона мы вынесли за пределы ZennoPoster, тем самым значительно снизив его обнаружение защитами целевых ресурсов, в самом ZennoPoster остаётся только логика подготовки и управления профилями через API ZennoBrowser.
Здесь мы занимаемся созданием и клонированием профилей, управлением их запуском и остановкой, а также выполнением всех доступных операций, которые на данный момент предоставляет API.
По мере развития продукта и расширения возможностей со стороны разработчиков, включая обещанную установку пресетов по API, я планирую дальше развивать этот подход и масштабировать автоматизацию параллельно с появлением новых функций.
Я сохранил данный шаблон в виде плагина и показал его работу в видео.
Кроме того, не стоит забывать и про использование расширения CapMonster Cloud.
Оно пригодится в тех случаях, когда браузер всё-таки попадает под дополнительные проверки и появляются капчи.
В такой связке мы закрываем ещё один потенциальный риск и делаем автоматизацию более устойчивой к защитам целевых ресурсов.
3.Заключение.
В результате мы выстроили полноценный и гибкий подход к автоматизации, в котором основная логика перенесена непосредственно внутрь браузера — в виде расширения для Chrome.
Это позволяет максимально приблизить поведение автоматизации к действиям реального пользователя и существенно снизить вероятность обнаружения со стороны целевых ресурсов.
ZennoPoster в данной архитектуре используется как управляющий инструмент: он отвечает за подготовку окружения, создание и клонирование профилей, их запуск и остановку через API ZennoBrowser.
Вся же критически важная логика взаимодействия с сайтами выполняется внутри браузера — через скрипты расширения.
Дополнительно мы используем готовые решения, такие как CapMonster Cloud, которые легко интегрируются через пресеты и помогают обрабатывать сложные сценарии с капчами, если браузер всё же попадает под дополнительную проверку.
Такой подход открывает широкие возможности для масштабирования, упрощает сопровождение проектов и позволяет гибко адаптироваться к усложняющимся защитам.
По мере развития API ZennoBrowser и появления новых функций, эту архитектуру можно и нужно развивать дальше, постепенно вынося всё больше логики за пределы классических шаблонов ZennoPoster.
Последнее редактирование модератором:

