navigator.webdriver — самый дешевый сигнал автоматизации, который всё ещё ломают первым
В спецификации WebDriver это флаг, который должен помогать страницам отличать управляемый браузер от ручного. На практике его читают сразу после загрузки документа, до рендера и до любых пользовательских событий. Если значение истинно, антифрод-связка часто не останавливается на нём одном: дальше смотрят согласованность с другими поверхностями.
Разберем энтропию данного параметра. Проверка обычно выглядит тривиально: `navigator.webdriver === true`, наличие `--enable-automation`, следы CDP, нестыковки между `window.navigator` и реальным поведением DOM. Под капотом Chromium API этот флаг может появляться не только из-за Selenium, но и при некорректной конфигурации драйвера, прокси-обвязки или JS-инъекции, которая меняет только одно свойство, а не всю модель окружения.
Типовая ошибка — «спуфить» его в лоб через `Object.defineProperty`. Это палится, если дескриптор отличается от нативного, если enumerable/configurable ведут себя не как у встроенного свойства, или если значение исчезает только в одном realm. Детект на уровне сетевого стека и поведенческих эвристик потом лишь подтверждает первичный сигнал: слишком чистый navigator при шумной телеметрии выглядит хуже, чем честный автоматизированный профиль.
Практически важно не маскировать один флаг, а выстраивать целостный профиль: совпадение userAgent, platform, plugins, permissions, языков, размеров viewport и поведения событий. Если один слой говорит «ручной браузер», а другой — «скрипт без человеческой латентности», алерт уже неизбежен.
Правильная стратегия — не точечный спуфинг, а проверка всей поверхности в одном тестовом контуре: как минимум через BrowserLeaks, CreepJS и собственный лог дескрипторов.
Антидетект: эксперт
@antidetect_expert_arb
navigator.webdriver — самый дешевый сигнал автоматизации, который всё ещё ломают первым
Этот пост опубликован в Telegram-канале Антидетект: эксперт. Подписаться можно по ссылке: @antidetect_expert_arb.