Контроль частоты кадров с BotBrowser
Как BotBrowser управляет частотой обновления дисплея и таймингом requestAnimationFrame на уровне движка, чтобы предотвратить fingerprinting по FPS.
Введение
API requestAnimationFrame синхронизирует операции отрисовки с циклом обновления экрана. Частота вызовов раскрывает частоту обновления дисплея (60 Гц ≈ 16.67 мс, 144 Гц ≈ 6.94 мс), что доступно любому сайту и используется для fingerprinting.
Влияние на приватность
Частота обновления — стабильная аппаратная характеристика, которая в сочетании с другими сигналами отображения даёт значительную энтропию для идентификации.
Подход BotBrowser на уровне движка
BotBrowser задаёт частоту кадров в самом рендеринг-пайплайне через флаг --bot-fps. Это гарантирует согласованность всех источников, зависящих от частоты кадров.
Режимы
# Частота из профиля
chrome --bot-profile="/path/to/profile.enc" --bot-fps=profile
# Фиксированные 60 FPS
chrome --bot-profile="/path/to/profile.enc" --bot-fps=60
# Использовать реальную частоту дисплея
chrome --bot-profile="/path/to/profile.enc" --bot-fps=real
Проверка
Измерьте интервалы requestAnimationFrame и убедитесь, что измеренная FPS совпадает с заданной.
Резюме
Контроль FPS на уровне движка уменьшает утечку информации о частоте обновления и дополняет другие механизмы защиты приватности.
title: "Управление частотой кадров с BotBrowser" description: "Как BotBrowser контролирует сигналы частоты обновления дисплея с помощью флага --bot-fps на уровне движка браузера." date: "2025-07-08" locale: ru category: fingerprint tags: ["fps", "frame-rate", "requestAnimationFrame", "fingerprinting", "privacy"] published: true
Риск для конфиденциальности
Частота обновления дисплея, измеримая через тайминг requestAnimationFrame, раскрывает оборудование монитора. Это значение определяется физическим оборудованием и не меняется при очистке cookies или смене браузера.
Решение BotBrowser
BotBrowser предоставляет флаг --bot-fps для управления частотой кадров на уровне конвейера рендеринга движка браузера.
Частота кадров на основе профиля
Используйте значение из профиля отпечатка:
chrome --bot-profile="/path/to/profile.enc" \
--bot-fps=profile \
--user-data-dir="$(mktemp -d)"
Сообщается частота кадров, определенная в профиле, независимо от реальной частоты обновления дисплея.
Пользовательская или реальная частота кадров
Установите конкретное значение или используйте реальную частоту обновления дисплея:
# Фиксированные 60 FPS
chrome --bot-profile="/path/to/profile.enc" \
--bot-fps=60
# Реальная частота обновления дисплея
chrome --bot-profile="/path/to/profile.enc" \
--bot-fps=real
Управление на уровне движка
Поскольку это работает на уровне конвейера рендеринга:
- Обратные вызовы
requestAnimationFrameсрабатывают с контролируемой частотой - Временные метки кадров согласованы с сообщаемой частотой
- CSS-анимации ведут себя согласованно с сообщаемой частотой кадров
Верификация
После запуска с --bot-fps проверьте частоту кадров:
const { chromium } = require('playwright-core');
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-fps=60',
],
headless: true,
});
const page = await (await browser.newContext()).newPage();
const measuredFps = await page.evaluate(() => {
return new Promise(resolve => {
const timestamps = [];
function frame(ts) {
timestamps.push(ts);
if (timestamps.length < 60) {
requestAnimationFrame(frame);
} else {
const intervals = [];
for (let i = 1; i < timestamps.length; i++) {
intervals.push(timestamps[i] - timestamps[i - 1]);
}
const avg = intervals.reduce((a, b) => a + b) / intervals.length;
resolve(Math.round(1000 / avg));
}
}
requestAnimationFrame(frame);
});
});
console.log('Измеренный FPS:', measuredFps); // Должно быть ~60
Ключевые проверки:
- Измеренная частота кадров соответствует настроенному значению
- Интервалы между кадрами согласованы
- Несколько методов измерения дают одинаковый результат
Начало работы
- Скачайте BotBrowser с GitHub
- Загрузите профиль отпечатка с помощью
--bot-profile - Установите частоту кадров с
--bot-fps=profile,--bot-fps=realили--bot-fps=60 - Проверьте, что сообщаемая частота кадров соответствует вашей конфигурации