
Почему любой антидетект на JavaScript спалится. Полгода назад я перестал латать скрапер и полез в C++ Chromium
armani-boi 7 минут назад Почему любой антидетект на JavaScript спалится. Полгода назад я перестал латать скрапер и полез в C++ Chromium 3 мин 281 JavaScript * Puppet * Из песочницы Полгода я жил в одном и том же цикле....
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. armani-boi 7 минут назад Почему любой антидетект на JavaScript спалится. Полгода назад я перестал латать скрапер и полез в C++ Chromium 3 мин 281 JavaScript * Puppet * Из песочницы Полгода я жил в одном и том же цикле. Собираешь скрапер, вечером он проходит все страницы, а к обеду следующего дня отдаёт сплошные капчи и 403.
Добавляешь puppeteer‑stealth, сверху ещё десяток заплаток, гонишь трафик через резидентные прокси, и всё равно на третьи сутки прилетает бан. Я устал чинить симптомы и сел разбираться, что именно нас выдаёт. Вывод, к которому я пришёл, оказался неприятным.
Технические детали
Антидетект, который живёт в JavaScript, спалится по определению. Дело не в том, что конкретные патчи кривые. Дело в том, что сам способ переопределить геттер из JS оставляет след, который читается тривиально.
Спрашиваешь у подменённой функции toString(), а она вместо показывает твою реализацию. Стелс‑библиотека это, конечно, тоже патчит, но тогда детектор идёт на уровень глубже. Он проверяет консистентность между главным фреймом, воркером и iframe, ловит утечку Runtime.
enable, сверяет форму TLS‑хендшейка (JA3/JA4) с тем, что заявляет User‑Agent. Где‑нибудь одно из этих мест обязательно разъедется, потому что правки натянуты поверх браузера, а не встроены в него. Отсюда выросла простая мысль.
Отраслевые последствия
Если проблема в том, что мы правим страницу, то править надо не страницу, а движок. Так появился Fortress, сборка Chromium, где антидетект зашит прямо в C++ Blink, V8 и BoringSSL, а не в инъекции поверх DOM. Каждый подменённый геттер это настоящий C++ геттер, поэтому toString() во всех реалмах честно отдаёт , и сверка «главный фрейм против воркера» ничего не находит, потому что расхождения просто нет.
Я не хочу делать вид, что это решает вообще всё, поэтому сразу помечу, где твёрдый факт, а где мои условия проверки. Проверял на четырёх публичных детекторах. CreepJS показывает 0% headless и 0% stealth.
Sannysoft и BrowserScan показывают всё зелёное, BrowserScan пишет «Normal». Живой Cloudflare Turnstile проходит без ручного клика. Всё это воспроизводится скриптом tools/gauntlet.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




