Scarnox · Blog

Browser fingerprinting для парсинга: как он работает

Browser fingerprinting — это идентификация посетителя по совокупности признаков его браузера, а не по cookie или аккаунту. Сайты используют его, чтобы узнавать вернувшихся посетителей, выявлять мошенничество и распознавать автоматизацию. Если вы парсите веб, вы с ним столкнётесь. Этот гайд объясняет, что именно измеряется, почему одно несовпадение создаёт проблемы и как вести один согласованный, добросовестный профиль для сбора публичных данных. Также он объясняет, в каких пределах настройка fingerprint вообще уместна.

Из чего состоит fingerprint

Ни одно значение по отдельности не идентифицирует браузер, но множество мелких значений вместе часто делают это. Типичные входные данные:

Скрипты fingerprinting объединяют эти данные в хеш или оценку. Чем больше стабильных и необычных сигналов, тем точнее идентификация.

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

Настоящий браузер внутренне согласован. Его операционная система соответствует его шрифтам, часовой пояс соответствует языковым настройкам, а размер экрана соответствует устройству, на котором он работает. Парсеры часто нарушают эту согласованность, даже не замечая этого:

Каждое несовпадение — маленький сигнал. Вместе они могут перевести запрос из категории «обычный посетитель» в «нужно присмотреться».

Шаг 1: измерьте собственную настройку

Увидеть, что страница узнаёт о вашем клиенте, можно, загрузив тестовую страницу для fingerprint, которой вы управляете, или диагностическую страницу, которую запускаете локально. Посмотрите на значения и спросите себя, описывают ли они одну согласованную машину. Вот минимальный пример на 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: один профиль — одна идентичность

Самая полезная привычка — считать каждую идентичность для парсинга одним профилем. Задайте ему единый набор признаков и сохраняйте их на протяжении всего его существования:

Менять один из этих параметров для каждого запроса подозрительнее, чем держать их стабильными. Согласованность и делает профиль обычным.

Шаг 3: двигайте профиль, как посетитель

Fingerprinting — лишь один из входов. Сайты также следят за тем, как быстро один профиль проходит по сайту. Профиль, который открывает двести карточек товаров за минуту, — не человек, что бы ни говорил его fingerprint. Распределяйте запросы, кешируйте результаты и останавливайтесь, когда страница на это указывает. Подробнее о темпе — в чек-листе о том, как парсить без блокировок.

Шаг 4: знайте пределы

Настройка fingerprint не может сделать автоматизированный профиль похожим на человека, которого там нет. Сайты, которые полагаются на fingerprinting, обычно сочетают его с лимитами запросов, проверками аккаунтов и иногда с капчей. Когда появляется капча, нужен токен от решателя, а не очередная правка fingerprint. Живой тип капчи в Scarnox — PopularCaptcha; запрос показан в гайде по PopularCaptcha на Python. Более широкую картину того, какие виджеты существуют, дают типы капчи.

Важнее другое: обход fingerprinting — это не разрешение игнорировать правила сайта. Если владелец ограничил автоматический доступ, правильный шаг — остановиться, а не делать свой профиль менее заметным. Fingerprinting — ещё и вопрос приватности. Некоторые сайты используют его, чтобы отслеживать людей между визитами, и это ещё одна причина собирать только то, что нужно вашему проекту.

Парсите ответственно

Куда двигаться дальше

Если ваша цель стоит за проверкой на уровне браузера, начните с обнаружения headless-браузера: там разобраны сигналы, специфичные для автоматизированных браузеров. Страницы, которым для показа контента нужен JavaScript, описаны в гайде парсинг сайтов на JavaScript.

Начните с пробного баланса, карта не нужна: создайте аккаунт и попробуйте поток PopularCaptcha на странице, которой вы владеете. Актуальные тарифы — на странице цен.

Что дальше