Human-behavior: почему наши выкупы «печатают с опечатками» и кликают не в центр кнопки

Наш бот специально печатает с опечатками. Промахивается мимо кнопки. Зависает на секунду и водит мышкой без дела, как будто отвлёкся на сообщение.

Звучит как баг. На самом деле — единственный способ не спалиться.

Антифрод Wildberries (~98% точность по 200+ параметрам) ловит самовыкупы не по факту покупки, а по поведению. Поэтому модуль human-behavior.ts подделывает не покупку — он подделывает живого человека, который её совершает. Это и есть «имитация поведения человека в выкупах».

Почему антифрод смотрит на поведение, а не на покупку?

Покупка — это всегда покупка. Деньги ушли, товар приехал, чек есть. По самому факту транзакции бота от человека не отличить — она идеально валидная.

Отличие вылезает в том, как эта покупка происходит.

Человек печатает «кросовки» вместо «кроссовки» и исправляет. Промахивается по кнопке на пару пикселей. Листает карточку, отвлекается, возвращается. Бот по умолчанию — нет: мгновенный ввод идеальной строки, клик ровно в центр (x/2, y/2), нулевые паузы.

Для антифрода это машинный почерк, который виден за версту.

Подробнее про сам детектор — в разборе как WB вычисляет самовыкупы. Здесь — про то, что мы этому противопоставляем.

Что конкретно делает модуль human-behavior?

Четыре механики, все на уровне сессии браузера, а не «галочки в настройках».

1. Опечатки при вводе (humanType, rate 10%). Каждый десятый символ в поисковом запросе печатается «по-человечески неправильно»: лишний пробел, лишний символ или неверная буква — а потом backspace и исправление. Опечатки кириллические, под раскладку реального покупателя, а не латиница из англоязычного шаблона.

2. Клик не в центр (humanClick). Координаты клика рандомизируются внутри bounding box (bbox — прямоугольник видимых границ элемента кнопки/ссылки). Живой палец и курсор не попадают в математический центр — мы это воспроизводим.

3. Человеческий idle. Паузы между действиями — не фиксированные «sleep 500ms», а разброс, имитирующий чтение карточки, раздумье, отвлечение.

4. Рандомные движения мыши. Курсор двигается по странице между действиями, а не телепортируется от элемента к элементу по прямой.

Чем это отличается от того, как делают другие сервисы?

Большинство дешёвых сервисов выкупов работают через HTTP-запросы напрямую: дёрнули API маркетплейса, оформили заказ, готово. Быстро и копейки по себестоимости — но поведенческого слоя там нет вообще. Антифроду нечего анализировать, кроме сетевого следа, а сетевой след у такого запроса машинный.

Чуть продвинутее — гоняют браузер, но без поведенческого слоя: instant-ввод, клик в центр, нулевые паузы. Формально «человек в браузере», по почерку — робот.

Мы держим полноценную сессию мобильного приложения с подделкой почерка ввода и моторики. Поведенческий модуль — не финальная косметика, а часть той же связки, что и имитация мобильного приложения WB: TLS-fingerprint (отпечаток TLS-рукопожатия, по которому палится поддельный клиент), заголовки, токены — и поверх этого живой почерк. Опечатка без правильного fingerprint бесполезна; правильный fingerprint без опечаток — тоже.

Что это даёт селлеру в деньгах?

Цена ошибки на WB не «забанили выкуп». Цена — снятие СПП (скидка постоянного покупателя) на 30 дней по всему ассортименту при подозрении на накрутку. Это не один товар — это весь магазин теряет видимость и конверсию на месяц.

Поведенческая имитация снижает вероятность того, что серия выкупов прочитается как машинная. Не до нуля — самовыкупы остаются серой зоной, и честная оценка живучести у нас «до 95%», а не «гарантия 100%».

Любой, кто обещает гарантию, либо не понимает антифрод, либо просто врёт тебе в лицо.

Математика простая: один залёт под СПП-санкцию по обороту обычно дороже, чем вся экономия на дешёвом сервисе без поведенческого слоя за тот же период.

Можно ли это подделать «вручную» или дешевле?

Можно нанять людей, которые руками выкупают с реальных телефонов. Это работает по поведению идеально — но не масштабируется, дорого и медленно, и ты упираешься в живых исполнителей с их человеческим фактором.

Наш смысл — взять поведение живого человека и воспроизвести его кодом на нужном объёме. Опечатка 10%, рандом по bbox, idle и дрожание мыши — это попытка свести машинную дешевизну с человеческим почерком в одной сессии. Нажал кнопку — дальше система сама печатает с ошибками за тебя.

FAQ

Что такое имитация поведения человека в выкупах? Это подделка не самой покупки, а действий покупателя: ввод с опечатками и исправлениями, клик не в центр кнопки, паузы на «чтение», случайные движения мыши. Антифрод WB анализирует поведение, а не факт транзакции, поэтому имитируется именно почерк.

Зачем боту делать опечатки специально? Идеальный мгновенный ввод без единой ошибки — машинный признак. Модуль humanType с rate 10% добавляет кириллические опечатки (лишний символ/пробел/неверная буква) с последующим backspace, чтобы ввод читался как человеческий.

Почему клик идёт не в центр кнопки? Реальный пользователь не попадает в математический центр элемента. humanClick рандомизирует координаты внутри bbox (границ кнопки), убирая пиксельную точность, по которой вычисляется бот.

Это даёт гарантию, что выкуп не спалят? Нет. Самовыкупы — серая зона. Поведенческая имитация повышает живучесть до ~95%, но 100% не гарантирует никто. Цена провала — снятие СПП на 30 дней по всему ассортименту.

Чем это отличается от дешёвых сервисов выкупов? Дешёвые работают через прямые HTTP-запросы или браузер без поведенческого слоя — палятся по машинному почерку. У нас полная сессия мобильного приложения: правильный TLS-fingerprint плюс человеческий ввод, клики и моторика поверх него.


Идеальный почерк выдаёт робота. Поэтому мы научили своего ошибаться — как человек.

Хочешь посмотреть, как это работает на твоих товарах — запусти выкуп в Toptaker и проверь почерк сам.

Хотите так же — но без ручной возни?

Toptaker делает выкупы и отзывы автоматически: SRID, чеки и скриншоты по каждому действию. 5 выкупов бесплатно при регистрации.