Свой анти-детект браузер + живой поиск билетов

Как система теперь обходит капчи и читает живые данные с сайтов, которые режут ботов.

integrations/stealth-browser · integrations/flight-search · 2026-06-13

Коротко: раньше любой автоматический браузер с нашего VPS упирался в капчу Aviasales и Cloudflare на каждом шагу, а лендинги-агрегаторы кормили приманкой «билет от 97 тысяч», которой в реальности нет. Теперь у системы есть собственный маскирующийся браузер — он проходит эти стены и достаёт настоящие цены по дням.

1. В чём была проблема

Сайты вроде Aviasales защищаются от роботов по трём признакам, и нас ловили по всем:

ПризнакЧто выдавало нас
Отпечаток браузераheadless-режим светит navigator.webdriver=true, нет реального GPU и шрифтов — «я робот»
Репутация IPнаш VPS — датацентровый адрес, он у антибота в чёрном списке по умолчанию
Капчакак следствие — Yandex SmartCaptcha («выберите автобусы») или Cloudflare «Just a moment»

Плюс отдельная ловушка: SEO-лендинги (aeroport-*.ru, uniticket) показывают цену «от …» как приманку. Реальная живая цена была вдвое выше — это и был корень неверного ответа в начале.

2. Решение — три слоя обхода + официальный API

Каждый слой включается по нарастанию. Главное: первого слоя в одиночку хватило пробить и Aviasales, и aviata.kz прямо с нашего VPS.

Слой 1 · camoufox бесплатно · основной

Анти-детект Firefox. Подменяет весь отпечаток (webdriver, canvas, шрифты, WebGL), добавляет человеческое движение курсора, поднимает свой виртуальный экран (Xvfb внутри — режим headless="virtual"). Для антибота выглядит как обычный человек.

Слой 1-альт · patchright бесплатно

Патченый Playwright Chromium — закрывает утечки, по которым палится обычный Chrome. Запасной движок, если где-то Firefox не зайдёт. Запускается под xvfb-run.

Слой 2 · резидентный прокси платно · по факту

Меняет датацентровый IP на «домашний». Нужен там, где отпечаток прошёл, а по IP всё равно режут. Включается одной переменной STEALTH_PROXY. Пока не заведён — не требуется.

Слой 3 · 2captcha платно · по факту

Если капча всё-таки выскочила — отдаёт её решателю (SmartCaptcha / Turnstile), вставляет токен обратно в страницу. ~$0.5–3 за 1000 решений. Ключ TWOCAPTCHA_KEY. Резерв на жёсткие цели.

Плюс отдельный чистый путь — официальный API

У Aviasales есть легальный партнёрский API (Travelpayouts): бесплатный токен, отдаёт цены и календарь структурой без всякого браузера и капчи. Это не обход, а штатный канал. Код готов (flights.api_prices), ждёт только бесплатный токен.

3. Как это работает по шагам

запрос цены camoufox: маскирует отпечаток грузит Aviasales капча? нет → читаем цены

Если бы капча появилась: → прокси (слой 2) → 2captcha (слой 3). На Aviasales до этого не дошло — слой 1 прошёл сам.

4. Доказательство — что реально прошли

ЦельЗащитаРезультат через стелс
aviata.kzCloudflare «Just a moment»✓ пройдено
Aviasales.kzYandex SmartCaptcha✓ пройдено, цены прочитаны
Trip.comwhaleguardне нужен — задачу закрыл Aviasales

5. Как пользоваться

Достаточно сказать в чат «найди билет … когда дешевле» — подхватывается скилл flight-search. Под капотом:

# календарь — где в окне дешевле
cli.py cal  ALA KZN 2306
# прямой+пересадка сразу по нескольким датам
cli.py scan ALA KZN 2306 2706 0407
# карточки одной даты: прямой / дешёвый / пересадка + цена «с багажом»
cli.py cards ALA KZN 2306

Для любого другого bot-walled сайта — stealth-browser/cli.py URL --wait-text "…". Полные доки — в integrations/stealth-browser/README.md и integrations/flight-search/README.md.

6. Демо — тот самый Алматы → Казань

Живые цены, добытые новым стеком (а не приманка). Видно главное: прямой рейс дешевле всего 23 июня, и это в окне «конец июня — начало июля».

ДатаПрямой Red WingsПрямой + багаж 10 кгЧерез Москву (8ч45)
23 июн (вт)147 335 ₸173 807 ₸
27 июн (сб)195 832 ₸224 899 ₸187 544 ₸
30 июн (вт)229 698 ₸209 953 ₸
4 июл (сб)195 832 ₸187 544 ₸

Прямой Red Wings летает по вторникам и субботам, 3 ч 40 мин, Sukhoi Superjet 100. Дешёвые «103 738» с лендингов — это рейс 19 часов через Екатеринбург, не прямой.

7. Деньги

КомпонентСтоимость
camoufox / patchright / Xvfbбесплатно (open-source)
Официальный API Travelpayoutsбесплатно (нужен токен)
Резидентный прокси (слой 2)~$2–5/ГБ или ~$30–50/мес, по факту
2captcha (слой 3)~$0.5–3 за 1000 решений, по факту

Платные слои не тратят ничего, пока не заданы их env-ключи. Сейчас всё работает на бесплатном слое 1.