Навчання ШІ-агентів на реальних даних: Захист скрейперів від систем виявлення ботів

· 12 хв читання
скрейпінг ai-агент cloudflare bot-detection антидетект навчання моделей playwright
Навчання ШІ-агентів на реальних даних: Захист скрейперів від систем виявлення ботів

Готові захистити свою цифрову особистість?

Оберіть тариф і запускайте непомітні профілі вже сьогодні.

Почати

Навчання великих мовних моделей та спеціалізованих ШІ-агентів вимагає даних — реальних, актуальних, різноманітних. Загальнодоступні датасети (Common Crawl, Wikipedia, GitHub) покривають базові потреби, але для спеціалізованих застосувань — торгових ботів, фінансових аналітиків, медичних асистентів — потрібні доменно-специфічні дані, які існують лише на реальних сайтах.

Проблема: більшість сайтів, де містяться цінні структуровані дані, захищені системами виявлення ботів. Cloudflare Bot Management, PerimeterX (тепер HUMAN), DataDome, Akamai Bot Manager — ці рішення розгорнуті на сотнях тисяч сайтів і постійно вдосконалюють методи детекції. Скрейпінг, який працював рік тому, сьогодні блокується.

Для команд, що будують ШІ-продукти, це не абстрактна проблема. Вона визначає, чи буде ваша модель навчена на реальних актуальних даних, чи на застарілих публічних датасетах, поки конкуренти збирають свіжі дані.

Як працюють сучасні системи виявлення ботів

Розуміння логіки детекції — передумова ефективного обходу. Сучасні bot-management системи працюють на кількох рівнях.

Рівень 1: Мережеві сигнали. IP-репутація — перша і найпростіша перевірка. Адреси з ASN датацентрів (AWS, GCP, Azure, Hetzner, OVH) мають низький рейтинг довіри за замовчуванням. Cloudflare підтримує динамічний рейтинг IP на основі агрегованих даних із мільйонів захищених сайтів. З’єднання через відомі Tor exit nodes або VPN-провайдери також детектуються.

Рівень 2: TLS fingerprint. Параметри TLS-хендшейку — версія, cipher suites, розширення, порядок — унікальні для різних HTTP-бібліотек. Python requests, Go http.Client, Node.js axios — кожна бібліотека має свій характерний TLS-fingerprint (JA3/JA4 hash), який відрізняється від fingerprint реального Chrome або Firefox. Cloudflare блокує запити з TLS fingerprint, що не відповідає заявленому User-Agent.

Рівень 3: HTTP/2 fingerprint. Подібно до TLS, характеристики HTTP/2 з’єднання (порядок headers, SETTINGS frames, window sizes) відрізняються між бібліотеками та реальними браузерами. JA3 еволюціонував до HTTP/2 fingerprinting (ALPN, header order).

Рівень 4: Браузерний JavaScript. Якщо скрейпер виконує JavaScript (Playwright, Puppeteer, Selenium), система виявлення запускає серію JavaScript-тестів: navigator properties, WebGL capabilities, Canvas rendering, наявність DevTools індикаторів, поведінка подій миші та клавіатури, WebWorker timing, WebAssembly capabilities.

Рівень 5: Поведінковий аналіз. Темп запитів, послідовність переходів між сторінками, патерн скролу, час між кліками — все це статистично порівнюється з людською поведінкою. Машинно-регулярна поведінка — рівні інтервали, ідеальне попадання в елементи, відсутність корекцій курсора — видає автомат.

Вибір правильного інструменту для задачі

Не всі дані потребують однакового рівня захисту від детекції. Стратегія залежить від типу сайту-цілі.

Статичні сайти без JavaScript-перевірки. Більшість контент-сайтів, блогів, новинних агрегаторів. Достатньо правильного User-Agent, TLS fingerprint та IP-ротації. Бібліотеки: curl-impersonate (Python/Go) — emulює точний TLS та HTTP/2 fingerprint Chrome або Firefox. Значно швидше за повноцінний браузер.

Сайти з Cloudflare без Bot Management. Стандартний Cloudflare захищає від DDoS та сканерів, але не запускає JavaScript-challenge для кожного запиту. curl-impersonate з резидентним IP, як правило, достатньо.

Сайти з активним JavaScript-challenge. Cloudflare Browser Integrity Check, PerimeterX, DataDome. Тут потрібен повноцінний браузер із правильним fingerprint. Playwright або Puppeteer через антидетект-браузер (Santiago Browser, Camoufox) — правильний інструмент.

Сайти з CAPTCHA. Якщо блокування переходить в CAPTCHA, автоматичне вирішення через 2Captcha, Anti-Captcha або Capsolver. Сучасні CAPTCHA-solvers використовують людей (crowdsourced solving) або ML-моделі для зображень.

curl-impersonate: обхід TLS-детекції без браузера

curl-impersonate — проект з відкритим кодом, що патчить libcurl для точного відтворення TLS та HTTP/2 fingerprint реальних браузерів. Він надає окремі бінарники для Chrome та Firefox різних версій.

# Приклад: імітація Chrome 120 з правильним fingerprint
curl_chrome120 \
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
  -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" \
  -H "Accept-Language: en-US,en;q=0.9" \
  --compressed \
  --proxy "http://user:pass@residential-proxy:port" \
  "https://target-site.com/data"

Для Python є обгортки (curl_cffi), що надають API, схоже на requests, але з правильним TLS fingerprint:

from curl_cffi import requests

session = requests.Session(impersonate="chrome120")
session.proxies = {"https": "http://user:pass@proxy:port"}
response = session.get("https://target-site.com/api/data")

Це рішення на 10-100x швидше за headless-браузер і достатнє для більшості сайтів без активного JavaScript-challenge.

Playwright через антидетект-браузер: коли потрібен реальний браузер

Для сайтів, що активно перевіряють браузерне середовище через JavaScript, потрібен справжній браузерний рушій із правильним fingerprint.

Стандартний Playwright використовує Chromium із очевидними маркерами автоматизації: navigator.webdriver === true, відсутні плагіни, підозрілі CDP артефакти в window.chrome, специфічний Canvas fingerprint headless Chromium. Ці маркери детектуються відомими бібліотеками перевірки (bot.sannysoft.com, arh.antoinevastel.com).

Playwright через Santiago Browser або інший антидетект усуває ці маркери: реальний Firefox-рушій (Camoufox) із коректними navigator properties, унікальний canvas fingerprint на основі реального GPU рендерингу, відсутність CDP-специфічних артефактів.

# Playwright через антидетект-браузер
from playwright.async_api import async_playwright

async with async_playwright() as p:
    # Підключення до запущеного профілю антидетекту
    browser = await p.chromium.connect_over_cdp("http://localhost:9222")
    page = await browser.new_page()
    
    # Людиноподібна навігація
    await page.goto("https://target-site.com")
    await page.wait_for_load_state("networkidle")
    
    # Рандомізовані затримки
    import random
    await page.wait_for_timeout(random.randint(1500, 3500))
    
    # Скрол перед взаємодією
    await page.evaluate("window.scrollTo(0, document.body.scrollHeight * 0.3)")
    await page.wait_for_timeout(random.randint(800, 1500))
    
    data = await page.content()

Поведінкова мімікрія: ключ до обходу ML-детекції

Сучасні системи виявлення ботів (особливо DataDome та PerimeterX) використовують ML-моделі, навчені на мільярдах людських та ботових сесій. Бінарні перевірки (“це WebDriver чи ні”) поступилися статистичному аналізу паттернів.

Рух миші. Людина рухає мишею з прискоренням, корекціями, мікро-тремтіннями. Ідеально пряма траєкторія від точки A до B або телепортація курсора — очевидні машинні сигнали. Бібліотеки гуманізації руху (bezier curves з шумом) відтворюють реалістичну траєкторію.

Timing між діями. Середній час реакції людини на візуальний стимул — 150-350ms. Менше 100ms або більше 5000ms (без руху) — аномалія. Рандомізований Gaussian розподіл затримок з mean ~200ms та std ~80ms виглядає реалістично.

Скрол паттерни. Люди скролять нерівномірно: зупиняються на цікавих ділянках, прокручують швидше через нерелевантний контент, іноді скролять назад. Монотонний скрол від верху до низу — машинний паттерн.

Пристрій введення. Touch events на мобільних, mouse events на десктопі. Змішання цих типів подій в одній сесії — аномалія.

Управління проксі для масштабного скрейпінгу

При навчанні ШІ-агентів на реальних даних зазвичай потрібні мільйони запитів. Правильне управління проксі визначає успіх операції.

Резидентні проксі vs датацентрові. Для сайтів із серйозним захистом резидентні проксі обов’язкові. Очікуйте $3-$15 за GB трафіку. Для менш захищених сайтів датацентрові ISP-проксі ($1-$5 за GB) дають гарне співвідношення ціна/якість.

Ротаційні vs стикі сесії. Для скрейпінгу сторінок, де кожен запит незалежний — ротаційні проксі (новий IP на кожен запит). Для сайтів, де потрібно зберігати стан сесії (логін, cookies, кошик) — стикі сесії (один IP протягом всієї сесії).

Географія. Якщо ви скрейпуєте регіонально локалізований контент (ціни, новини, правові документи) — проксі в цільовій країні обов’язкові. Ціни на Amazon.de та Amazon.fr різняться; контент з IP Франції відповідає французькій локалізації.

Ліміти швидкості. Агресивний скрейпінг — навіть із ротованими IP — може тригерити rate limiting за поведінковими паттернами (занадто багато запитів до одних ендпоінтів із різних IP). Адаптивний rate limiter, що сповільнюється при отриманні 429/503 відповідей, продовжує термін служби проксі-пулу.

Збереження та структурування даних для навчання

Зібрані дані мають цінність лише якщо правильно структуровані для навчання моделей.

Дедублікація. Веб-контент повний дублікатів — синдикований контент, перевидання, scraped copies. MinHash або SimHash дозволяють ефективно видаляти near-duplicates з великих колекцій.

Якість фільтрація. Автоматичні фільтри для відсіювання: boilerplate (навігація, footer, реклама), занадто короткий текст (<50 слів), нерелевантна мова, HTML-артефакти, що залишились після парсингу.

Метадані. Кожен документ у навчальному датасеті повинен мати: джерело URL, дата збору, мова, домен, приблизна якість. Ці метадані дозволяють фільтрувати та зважувати документи при навчанні.

Формати. JSONL — стандарт для LLM навчальних датасетів (кожен рядок — JSON об’єкт із text та metadata полями). Parquet — для великих датасетів (ефективне стиснення та швидке читання по колонках).

Правові та етичні міркування

Скрейпінг для навчання ШІ знаходиться у правовій сірій зоні у більшості юрисдикцій. Кілька ключових точок:

robots.txt. Не має юридичної сили у більшості юрисдикцій, але ігнорування robots.txt вважається поганою практикою та може посилити правову позицію сайту в суперечці. Мінімум — перевіряйте robots.txt і поважайте Crawl-delay.

Terms of Service. Порушення ToS може бути підставою для позову (CFAA у США, аналоги в ЄС). Для комерційних датасетів — юридична консультація обов’язкова.

Авторське право. Зібраний контент може бути захищений авторським правом. Для навчання моделей у більшості юрисдикцій діє принцип “fair use” або “text and data mining exception” (ЄС, Японія), але межі нечіткі.

Навантаження на сервер. Агресивний скрейпінг, що впливає на продуктивність сайту, може кваліфікуватись як DoS-атака. Throttle швидкість запитів до рівня, що не впливає на нормальних користувачів.

Для власне дослідницьких та некомерційних проектів правовий ризик мінімальний. Для комерційних застосувань — структурований підхід до правової відповідності та, де можливо, ліцензовані датасети знижують ризик.

Готові захистити свою цифрову особистість?

Оберіть тариф і запускайте непомітні профілі вже сьогодні.

Отримуйте 15% довічну комісію з кожного реферала.

Стати партнером →