Идентичность

Внедрение истории: генерация реалистичной истории

Как добавить реалистичную историю просмотров в профили браузера, с поддержкой настраиваемого контроля глубины истории.

Документация

Нужна поддерживаемая продуктовая документация?

У этой статьи есть соответствующая страница в центре документации. Используйте docs для каноничного сценария настройки, актуальных флагов и долгосрочной справки.

Введение

Каждый реальный браузер накапливает историю просмотров со временем. Кнопка «Назад» имеет куда вернуться, history.length больше единицы, а внутреннее хранилище истории браузера содержит записи за дни или недели. Только что запущенный браузер с нулевой историей выделяется на фоне браузера с естественным следом использования. Для исследований приватности, тестирования и управления несколькими аккаунтами состояние истории просмотров является важной частью общей идентичности браузера.

BotBrowser предоставляет флаг --bot-inject-random-history (PRO-тариф) для заполнения сессии браузера синтетической историей просмотров при запуске. Сгенерированная история включает записи популярных веб-сайтов с разнообразными временными метками, создавая реалистичный след использования, который существует до начала любой автоматизации. Этот флаг работает совместно с другими сигналами идентичности, такими как --bot-cookies и --bot-bookmarks, для создания сессий браузера, которые выглядят естественно использованными с самого начала.

Влияние на приватность: почему история просмотров важна

Свойство history.length доступно любому JavaScript, запущенному на странице. Свежая сессия браузера всегда начинается с history.length равным 1 (текущая страница). Браузер с предшествующей историей навигации имеет более высокое значение. Это простое число раскрывает, использовался ли браузер ранее в текущей сессии.

Помимо history.length, общее поведение браузера с нулевой историей отличается от браузера с накопленным состоянием. Паттерны навигации, доступность кнопок «вперёд/назад» и поведение восстановления сессии зависят от состояния истории. Исследователям приватности, изучающим фингерпринтинг браузеров, необходимо контролировать этот сигнал для создания согласованных, воспроизводимых тестовых сред.

Для управления несколькими аккаунтами каждая идентичность должна иметь независимую историю просмотров, отражающую естественное использование. Браузер, который всегда начинает с чистой историей, выглядит как свежая установка, что не соответствует тому, как большинство пользователей взаимодействуют со своими браузерами. Добавление синтетической истории создаёт более полную идентичность, согласованную с другими сигналами, которые предоставляет профиль.

Техническая основа

Как работает история просмотров в Chromium

Chromium хранит историю просмотров в базе данных SQLite внутри каталога пользовательских данных. Эта база данных содержит:

  • Посещённые URL: полный URL каждой посещённой страницы
  • Временные метки посещений: когда каждая страница была посещена, с точностью до микросекунд
  • Счётчики посещений: сколько раз каждый URL был посещён
  • Типы переходов: как пользователь попал на страницу (ввод URL, клик по ссылке, перенаправление и т.д.)
  • Рефереры: с какой страницы был осуществлён переход

Свойство history.length в JavaScript отражает количество записей в истории сессии текущей вкладки (стек назад/вперёд), а не общую историю просмотров. Однако общее состояние базы данных истории влияет на функции вроде подсказок омнибокса (адресной строки), плиток «Наиболее посещаемые» на странице новой вкладки и интерфейса поиска по истории chrome://history.

Сессионная история и глобальная история

Существует важное различие между двумя типами истории:

Сессионная история относится к конкретной вкладке и отслеживает навигацию назад/вперёд внутри одной вкладки. Именно с ней взаимодействуют history.length, history.back() и history.forward(). Она сбрасывается при закрытии вкладки.

Глобальная история - это общебраузерная запись всех посещённых URL во всех вкладках и сессиях. Она хранится в базе данных истории и сохраняется между перезапусками браузера (если пользователь не очистит её).

Флаг --bot-inject-random-history BotBrowser заполняет глобальную базу данных истории, придавая браузеру реалистичный след истории, который отображается в chrome://history и влияет на подсказки омнибокса.

Распространённые подходы и их ограничения

Навигация через скрипт

Самый прямой способ создать историю просмотров - реально посетить веб-сайты перед началом основной задачи. Это означает переход по списку URL, ожидание загрузки каждого, затем переход к автоматизации. Этот подход работает, но имеет значительные недостатки:

  1. Временные затраты: загрузка 20-50 страниц занимает десятки секунд или минуты в зависимости от сложности страниц и скорости сети
  2. Сетевая нагрузка: каждая загрузка страницы генерирует реальный сетевой трафик, потребляет полосу пропускания прокси и может вызвать ограничение частоты запросов
  3. Побочные эффекты: реальные загрузки страниц выполняют JavaScript, устанавливают cookies, отправляют события аналитики и могут запустить системы отслеживания до начала фактической задачи
  4. Недетерминированность: время загрузки страниц, перенаправления и динамический контент делают процесс генерации истории непредсказуемым

Повторное использование каталога пользовательских данных

Повторное использование --user-data-dir, уже содержащего историю из предыдущей сессии, автоматически сохраняет историю просмотров. Однако это также сохраняет всё остальное состояние (кеш, cookies, локальное хранилище, service workers), не давая вам детального контроля над тем, какие сигналы переносить, а какие сбросить.

JavaScript history.pushState

API history.pushState() может добавлять записи в сессионную историю без навигации, но он работает только в пределах одного источника и влияет только на сессионную историю текущей вкладки. Он не добавляет записи в глобальную базу данных истории просмотров и не влияет на подсказки омнибокса.

Подход BotBrowser

Флаг --bot-inject-random-history BotBrowser генерирует синтетическую историю просмотров при запуске, до загрузки любых страниц. Этот подход позволяет избежать проблем производительности и побочных эффектов навигации через скрипт, при этом создавая реалистичное состояние истории.

Три режима работы

Флаг поддерживает три режима (обновление март 2026):

  • --bot-inject-random-history или --bot-inject-random-history=true: внедряет случайное количество записей истории (2-7). Это поведение по умолчанию.
  • --bot-inject-random-history=15: внедряет ровно 15 записей истории. Результирующее значение history.length составит 16 (15 внедрённых записей + текущая страница). Можно указать любое положительное целое число.
  • --bot-inject-random-history=false: полностью отключает внедрение истории.

Синтаксис ={number} даёт точный контроль над глубиной истории, что полезно, когда требуется конкретное значение history.length для согласованности между сессиями.

Что генерируется

Флаг создаёт записи истории, включающие:

  • Популярные веб-сайты: записи от известных доменов, которые типичный пользователь посещал бы
  • Разнообразные временные метки: посещения распределены по реалистичному временному диапазону, а не сгруппированы в один момент
  • Различные домены: сгенерированная история охватывает несколько категорий (поиск, новости, социальные сети, покупки) для отражения естественных паттернов просмотра
  • Реалистичные счётчики посещений: некоторые URL появляются несколько раз, имитируя паттерн часто посещаемых сайтов

Заполнение на уровне движка

Записи истории вставляются в базу данных истории браузера во время инициализации. Это означает, что они доступны до создания любого контекста браузера и до загрузки любой страницы. Омнибокс, chrome://history и страница новой вкладки сразу отражают заполненную историю.

Отсутствие сетевой нагрузки

Поскольку история генерируется синтетически, а не через реальные посещения страниц, нет сетевого трафика, загрузок страниц и выполнения JavaScript. Заполнение истории добавляет незначительное время запуска по сравнению с навигацией через скрипт.

Работа со свежими каталогами пользовательских данных

Флаг работает с новыми каталогами --user-data-dir. Вам не нужно подготавливать или наполнять каталог заранее. Каждый запуск со свежим временным каталогом и --bot-inject-random-history создаёт новый набор записей истории.

Конфигурация и использование

Базовое использование CLI

# Случайная история (2-7 записей)
chrome --bot-profile="/path/to/profile.enc" \
       --bot-inject-random-history \
       --user-data-dir="$(mktemp -d)"

# Точное количество: внедрить 15 записей (history.length = 16)
chrome --bot-profile="/path/to/profile.enc" \
       --bot-inject-random-history=15 \
       --user-data-dir="$(mktemp -d)"

Интеграция с Puppeteer

const puppeteer = require('puppeteer-core');

(async () => {
  const browser = await puppeteer.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/path/to/profile.enc',
      // Используйте =N для точного количества, или опустите значение для случайного (2-7)
      '--bot-inject-random-history=10',
    ],
    headless: true,
    defaultViewport: null,
  });

  const page = await browser.newPage();
  await page.goto('https://example.com');

  const historyLength = await page.evaluate(() => history.length);
  console.log('History length:', historyLength); // 11 (10 + текущая страница)
  await browser.close();
})();

Интеграция с Playwright

const { chromium } = require('playwright-core');

(async () => {
  const browser = await chromium.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/path/to/profile.enc',
      // Используйте =N для точного количества, или опустите значение для случайного (2-7)
      '--bot-inject-random-history=20',
    ],
    headless: true,
  });

  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto('https://example.com');
  await browser.close();
})();

Полная настройка идентичности

Комбинируйте историю с закладками, cookies и настройками локали для создания полной идентичности:

chrome --bot-profile="/path/to/profile.enc" \
       --bot-inject-random-history \
       --bot-bookmarks='[{"title":"Google","type":"url","url":"https://www.google.com"},{"title":"YouTube","type":"url","url":"https://www.youtube.com"}]' \
       --bot-cookies="@/path/to/cookies.json" \
       --bot-always-active \
       --bot-config-timezone=Europe/London \
       --bot-config-locale=en-GB \
       --bot-config-languages=en-GB,en

Верификация

После запуска с --bot-inject-random-history проверьте, что история была заполнена:

const page = await browser.newPage();

// Проверка длины сессионной истории (должна быть > 1 после некоторой навигации)
await page.goto('https://example.com');
const historyLength = await page.evaluate(() => history.length);
console.log('Session history length:', historyLength);

// Переход на страницу истории для просмотра глобальной истории
await page.goto('chrome://history');
// Страница истории должна показывать записи из синтетической истории
History Population: Synthetic vs. Scripted --bot-inject-random-history No network traffic Instant population No JS side effects Works with fresh data dir Scripted Navigation Real HTTP requests Seconds to minutes Triggers analytics/tracking Non-deterministic timing

Лучшие практики

  • Используйте свежий user-data-dir для каждой сессии. Каждая сессия должна начинаться с собственного каталога данных, чтобы избежать переноса нежелательного состояния: --user-data-dir="$(mktemp -d)"
  • Комбинируйте с --bot-always-active. Флаг --bot-always-active (PRO-тариф, включён по умолчанию) поддерживает окна в активном состоянии, делая сессию более похожей на активный просмотр.
  • Согласовывайте историю с идентичностью. При использовании истории совместно с флагами локали и часового пояса комбинация создаёт согласованную идентичность.
  • Комбинируйте с --bot-bookmarks. Закладки и история вместе создают более полную идентичность браузера, чем каждый элемент по отдельности.
  • Не полагайтесь только на history.length для проверки. Сессионная история и глобальная история - это разные вещи. Проверяйте chrome://history для полной картины.

Часто задаваемые вопросы

Какие веб-сайты появляются в сгенерированной истории?

Сгенерированная история включает записи от популярных, широко известных веб-сайтов из нескольких категорий. Конкретные записи варьируются для создания реалистичного паттерна просмотра.

Соответствует ли сгенерированная история локали профиля?

Генерация истории создаёт общий набор популярных глобальных веб-сайтов. Для специфичной для локали истории сгенерированные записи дополняются настройками локали и часового пояса, которые вы задаёте через другие флаги.

Можно ли контролировать, какие URL появляются в истории?

Флаг --bot-inject-random-history генерирует историю автоматически. Для произвольных списков URL используйте навигацию через скрипт или управление каталогом пользовательских данных.

Влияет ли это на history.length в JavaScript?

Флаг заполняет глобальную историю просмотров (базу данных chrome://history). Свойство history.length в JavaScript отражает сессионную историю текущей вкладки, которая начинается с 1 для новой вкладки. После навигации по страницам history.length увеличивается как обычно.

Какой тариф требуется для --bot-inject-random-history?

Флаг --bot-inject-random-history доступен на PRO-тарифе.

Можно ли использовать это с Docker или headless-серверными развёртываниями?

Да. Флаг работает во всех средах развёртывания, включая Docker-контейнеры и headless Linux-серверы. Для генерации истории не требуется дисплей или GUI.

Как это взаимодействует с --user-data-dir?

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

Как контролировать точное значение history.length?

Используйте синтаксис ={number}. Например, --bot-inject-random-history=15 внедряет ровно 15 записей истории, поэтому после перехода на страницу history.length будет равен 16 (15 внедрённых + 1 текущая страница). Это полезно, когда вам нужна определённая, воспроизводимая глубина истории в нескольких сессиях. Без суффикса ={number} флаг внедряет случайное количество от 2 до 7.

Итоги

Флаг --bot-inject-random-history добавляет реалистичную историю просмотров в сессии BotBrowser без накладных расходов и побочных эффектов навигации через скрипт. В сочетании с закладками, cookies и конфигурацией локали он создаёт идентичности браузера с полным следом использования.

По связанным темам смотрите Управление cookies для сохранения сессий, Предзаполнение закладок для настройки закладок и Управление профилями для организации наборов идентичностей.

#History#Injection#Identity#Browsing#Privacy

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.