Автоматизация рутины на hh.ru: как мы учили Headless Chrome притворяться живым человеком (RPA против антифрода)
- Для крупных job-board платформ в 2026 году описаны WAF, анализ TLS-отпечатков, поведенческая биометрия и «теневые баны», из-за которых HTTP-скрипты живут недолго.
- Защита сравнивает TLS Fingerprint (JA3/JA3S): порядок шифров у клиентов Python (requests, aiohttp, httpx) отличается от Chrome/Safari, что приводит к 403, капче или блокировке.
- Для headless-режима перечислены JS-признаки бота: navigator.webdriver, WebGL-вендоры вроде Google SwiftShader/VMware, отсутствие navigator.plugins и «дефолтное» окно 800x600.
- Предложенное решение включает кастомные сборки Chromium с вырезанными флагами автоматизации и жёсткую привязку профиля: каждому воркеру — свой fingerprint.
- Для снижения банов описана Human Mimicry: движение курсора по кубическим кривым Безье с шумом, скролл, паузы Random Sleep 3–12 секунд, иногда выделение текста перед кликом.
- Архитектура: Core на Python/FastAPI с PostgreSQL, Orchestrator с Redis-очередью и лимитом до 20 откликов в сутки на аккаунт, Browser Nodes в Docker с Playwright (до 1 ГБ RAM на браузер), LLM (self-hosted Llama или OpenAI API) для разбора DOM в JSON и генерации сопроводительного письма.
Почему это важно: Материал иллюстрирует гонку «Red Team vs Blue Team»: на каждое улучшение скрипта платформа отвечает новыми сигналами детекта. Связка TLS-отпечатков и поведенческой биометрии показывает, что защита не сводится к одному «флажку». На практике это часто означает рост порога входа и переход от «скрипта на вечер» к поддерживаемой системе.
На что обратить внимание: В описанной схеме устойчивость держится на нескольких допущениях: уникальный цифровой слепок воркера, резидентские прокси и кастомная сборка Chromium. Отдельно отмечается лимит по числу откликов в сутки на аккаунт как способ не создавать поведенческие аномалии на бэкенде платформы. Роль LLM здесь двойная: она заменяет хрупкие селекторы при разборе DOM и формирует тексты отклика, но добавляет ещё один слой, который нужно поддерживать при изменениях интерфейса.
Коротко
- История про hh.ru — пример того, что автоматизация «простого клика» упирается не в парсинг, а в антифрод и стоимость поддержки решения.
- Для подобных задач обычно важно понимать, где срабатывает защита: на сервере, в клиентском JS или на уровне поведения — это меняет архитектуру.
- Когда речь о headless-браузерах, «цифровой слепок» становится активом: его стабилизация и воспроизводимость важнее разовых обходов.
- В статье показан паттерн «оркестратор + воркеры браузера»: он помогает масштабировать тяжёлые сессии и снижать риск аномалий на аккаунте.
- LLM в таком контуре часто используют как слой адаптации к редизайнам (разбор DOM и тексты откликов): это уменьшает ломкость, но добавляет сложность.
FAQ
Зачем эта статья важна, если она не про поиск работы как таковой, а про техническую автоматизацию откликов на крупной платформе?
Она показывает, какие классы защит ломают простые скрипты и почему авторы переходят к RPA-архитектуре с имитацией поведения и LLM.
Почему авторы считают, что один только requests с подстановкой User-Agent уже не подходит для hh.ru и похожих job-board платформ?
Потому что защита анализирует TLS-отпечатки (JA3/JA3S) и быстро приводит к 403, капче или блокировке, а для динамических действий нужен браузер.
Какие признаки headless-браузера в статье названы типичными и почему их достаточно, чтобы детектить бота на стороне клиентского JavaScript?
Упоминаются navigator.webdriver, WebGL-вендоры вроде Google SwiftShader/VMware, отсутствие navigator.plugins и «дефолтные» размеры окна. Эти сигналы видны в JS и помогают отличать автоматизацию.
Как именно LLM используется в описанной системе и какие задачи она берёт на себя помимо генерации письма-отклика на вакансию?
Модель применяют для разбора DOM: ей передают фрагмент дерева и просят вернуть JSON с описанием вакансии, чтобы меньше зависеть от CSS-селекторов. Также она генерирует сопроводительное письмо, опираясь на текст вакансии.
Читайте также
- Почему User-Agent больше не спасает HTTP-автоматизацию: На защищённых платформах имитация браузера через подстановку User-Agent перестаёт работать, потому что защита смотрит глубже заголовков. Отдельный класс сигналов — сетевые и TLS-характеристики клиента, по которым Python-библиотеки заметно отличаются от реальных браузеров.
[Антифрод и безопасность]
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться

Статья на примере hh.ru объясняет, почему в 2026 году простые скрипты для отклика на вакансии быстро упираются в защиту, и описывает архитектуру обхода таких барьеров. Главная идея — RPA с «живым» браузером, имитацией поведения и LLM.