Browser fingerprinting пояснено для скраперів
Browser fingerprinting — це ідентифікація відвідувача за сукупністю ознак його браузера, а не за cookie чи обліковим записом. Сайти використовують його, щоб впізнавати тих, хто повертається, виявляти шахрайство і розпізнавати автоматизацію. Якщо ви скрапите веб, ви з ним зіткнетеся. Цей посібник пояснює, що саме вимірюється, чому навіть одна невідповідність створює проблеми, і як тримати один узгоджений, добропорядний профіль для збору публічних даних. Він також пояснює межі того, що може і має робити тюнінг відбитка.
З чого складається відбиток
Жодне окреме значення не визначає браузер, але багато дрібних значень разом часто визначають. Типові вхідні дані:
- User agent і client hints. Назва браузера, версія та операційна система, які браузер повідомляє.
- Геометрія екрана і вікна. Розмір екрана, глибина кольору, співвідношення пікселів пристрою і розмір viewport.
- Мова і часовий пояс. Заголовок
Accept-Language,navigator.languagesі часовий пояс, який повідомляє браузер. - Встановлені шрифти. Шрифти, які сторінка може виявити. Вони відрізняються між операційними системами та встановленим софтом.
- Вихід canvas, WebGL і аудіо. Дрібні відмінності в тому, як графічний або аудіостек малює тестове зображення чи обробляє звук.
- Мережеві характеристики. TLS-рукостискання, налаштування HTTP/2 і порядок заголовків запиту. Сервер бачить їх ще до того, як запуститься будь-який JavaScript.
Скрипти для fingerprinting об'єднують ці ознаки в хеш або оцінку. Чим більше стабільних і незвичних сигналів, тим більш ідентифікувальним є результат.
Чому невідповідність помітна
Справжній браузер внутрішньо узгоджений. Його операційна система відповідає його шрифтам, часовий пояс відповідає мовному налаштуванню, а розмір екрана відповідає пристрою, на якому він працює. Скрапери часто порушують цю узгодженість, навіть не маючи такого наміру:
- User agent, скопійований з настільного браузера, надісланий із сервера, на якому не встановлено жодного шрифту.
- Німецький
Accept-Languageу запиті з IP-адресою з іншої країни і часовим поясом, який не відповідає ні тій, ні іншій. - Headless-середовище, яке повідомляє розмір вікна, якого не використовує жоден справжній монітор.
- Абсолютно новий профіль при кожному запуску, тож cookie та історія ніколи не виглядають як у відвідувача, що повертається.
Кожна невідповідність — це малий сигнал. Разом вони можуть перевести запит із категорії «звичайний відвідувач» у категорію «треба придивитися».
Крок 1: виміряйте власне налаштування
Ви можете побачити, що сторінка дізнається про ваш клієнт, завантаживши тестову сторінку для fingerprinting, яку ви контролюєте, або локальну діагностичну сторінку. Подивіться на значення і запитайте себе, чи описують вони одну узгоджену машину. Ось мінімальний приклад Playwright, який виводить кілька з них:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context(locale="en-GB", timezone_id="Europe/London")
page = context.new_page()
page.goto("https://example.com") # замініть на сторінку, якою володієте
print(page.evaluate("""() => ({
language: navigator.language,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
platform: navigator.platform,
viewport: [innerWidth, innerHeight]
})"""))
browser.close()
Крок 2: одна ідентичність на профіль
Найкорисніша звичка — вважати кожну ідентичність для скрапінгу одним профілем. Задайте їй один набір ознак і зберігайте його протягом усього її життя:
- Одна збірка браузера, один user agent і одна операційна система.
- Локаль, мова і часовий пояс, що відповідають регіону, звідки йде трафік.
- Viewport і коефіцієнт масштабування пристрою, що відповідають реальному екрану.
- Постійне сховище cookie, щоб профіль поводився як відвідувач, що повертається.
Міняти одну з цих ознак при кожному запиті підозріліше, ніж тримати їх сталими. Саме послідовність робить профіль схожим на звичайний.
Крок 3: темп профілю має бути як у відвідувача
Fingerprinting — лише один вхідний сигнал. Сайти також дивляться, як швидко один профіль рухається сайтом. Профіль, який за хвилину завантажує двісті сторінок товарів, не є людиною, яким би не був його відбиток. Розподіляйте запити, кешуйте результати і зупиняйтеся, коли сторінка вказує на це. Чек-лист скрапінгу без блокування детальніше описує темп.
Крок 4: знайте межі
Тюнінг відбитка не може зробити автоматизований профіль схожим на людину, якої там немає. Сайти, що покладаються на fingerprinting, зазвичай поєднують його з лімітами частоти, перевірками облікових записів і часом з капчею. Коли з'являється капча, вам потрібен токен від солвера, а не ще один тюнінг відбитка. Живий тип капчі в Scarnox — PopularCaptcha; посібник з PopularCaptcha на Python показує запит. Ширшу картину того, які віджети існують, дає огляд типів капчі.
Важливіше інше: обхід fingerprinting не дає ліцензії ігнорувати правила сайту. Якщо власник обмежив автоматизований доступ, правильний крок — зупинитися, а не робити свій профіль важчим для помітки. Fingerprinting також є темою конфіденційності. Деякі сайти використовують його, щоб відстежувати людей між відвідуваннями, і це ще одна причина збирати лише те, що потрібно вашому проєкту.
Scrape responsibly
- Прочитайте
robots.txtі умови використання, перш ніж скрапити сайт. - Робіть менше, але повільніших запитів і кешуйте те, що вже зібрали.
- Не створюйте профілів, щоб видавати себе за реальних людей або обходити блокування.
- Не зберігайте персональних даних, які вам не потрібні, і ставтеся до тих, що зберігаєте, обережно.
Куди йти далі
Якщо ваша ціль стоїть за перевіркою на рівні браузера, почніть з виявлення headless-браузера, де описані сигнали, специфічні для автоматизованих браузерів. Сторінки, які потребують JavaScript для показу вмісту, розглянуто в скрапінгу JavaScript-сайтів.
Почніть з безкоштовного пробного кредиту, картка не потрібна: створіть обліковий запис і спробуйте процес PopularCaptcha на сторінці, якою володієте. Актуальні тарифи — на сторінці цін.