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

Внедрение закладок: предзаполнение в браузере

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

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

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

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

Введение

Реальный браузер несёт в себе историю. У него есть закладки, сохранённые за недели и месяцы, организованные в папки, отражающие интересы и привычки пользователя. Когда вы запускаете свежий экземпляр браузера для автоматизации или исследований приватности, пустая панель закладок является одним из многих сигналов, отличающих его от браузера с реальной историей использования. Закладки - часть более широкого слоя идентичности, который делает сессию браузера похожей на используемую, а не только что созданную.

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

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

Системы отслеживания собирают множество сигналов для построения профиля браузера. Хотя cookie и отпечатки обсуждаются чаще всего, поведенческие сигналы и сигналы состояния тоже играют роль. Наличие или отсутствие закладок, количество записей в истории просмотров и состояние панели закладок - всё это вносит вклад в общую картину сессии браузера.

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

Пустые панели закладок также являются практической проблемой. Некоторые рабочие процессы требуют взаимодействия с элементами UI, связанными с закладками, или тестирования реакции сайтов на API chrome.bookmarks. Предзаполнение закладок обеспечивает реалистичную отправную точку для этих сценариев.

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

Как Chromium хранит закладки

Chromium хранит закладки в JSON-файле Bookmarks внутри директории пользовательских данных, конкретно в папке профиля (например, Default/Bookmarks). Файл содержит древовидную структуру с двумя корневыми узлами: bookmark_bar (видимый на панели закладок) и other (папка "Другие закладки").

Каждая запись закладки имеет следующие свойства:

  • name/title: отображаемый текст на панели закладок или в менеджере
  • url: целевой URL для закладок URL-типа
  • type: url для закладки или folder для папки с дочерними элементами
  • children: массив вложенных закладок и папок (для записей типа folder)
  • date_added: временная метка создания закладки

Видимость закладок

Закладки отображаются в нескольких местах браузера:

  1. Панель закладок: наиболее видимое расположение, под адресной строкой
  2. Менеджер закладок: доступен через chrome://bookmarks
  3. Страница новой вкладки: некоторые конфигурации показывают часто добавляемые в закладки сайты
  4. Подсказки омнибокса: адресная строка может предлагать URL закладок при вводе

Предзаполнение закладок через --bot-bookmarks гарантирует их появление во всех этих местах.

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

Ручное редактирование файла закладок

Можно создать директорию пользовательских данных, вручную создать или отредактировать JSON-файл Bookmarks, а затем запустить браузер с этой директорией. Это работает, но имеет недостатки:

  • Формат файла Bookmarks включает поля метаданных (GUID, временные метки во внутреннем формате Chromium), которые должны быть корректными
  • Нужно управлять директориями пользовательских данных явно
  • Нет чёткого разделения между данными закладок и другим сохранённым состоянием

Использование API chrome.bookmarks

API chrome.bookmarks позволяет создавать закладки программно, но доступен только расширениям браузера. Это означает необходимость установки расширения, что добавляет сложность и обнаружимый сигнал.

Подходы на уровне фреймворков

Ни Playwright, ни Puppeteer не предоставляют нативный API закладок. Единственный встроенный способ - навигация на chrome://bookmarks и взаимодействие с UI, что медленно и хрупко.

Подход BotBrowser

BotBrowser обрабатывает предзаполнение закладок на уровне движка через флаг --bot-bookmarks.

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

При передаче --bot-bookmarks BotBrowser заполняет хранилище закладок во время инициализации браузера, до загрузки страниц и до создания контекста. Закладки сразу доступны в панели закладок, менеджере и подсказках омнибокса.

Формат JSON

--bot-bookmarks='[{"title":"Google","type":"url","url":"https://www.google.com"},{"title":"News","type":"folder","children":[{"title":"BBC","type":"url","url":"https://www.bbc.com"},{"title":"Reuters","type":"url","url":"https://www.reuters.com"}]}]'

Структура поддерживает:

  • URL-закладки: объекты с title, type: "url" и url
  • Папки: объекты с title, type: "folder" и массивом children
  • Неограниченная вложенность: папки могут содержать другие папки на любую глубину

Без расширений

Поскольку наполнение происходит на уровне движка, расширение не требуется. Это устраняет поверхность обнаружения.

Сочетание с другими сигналами идентичности

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

Настройка и использование

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

# Простая панель закладок
chrome --bot-profile="/path/to/profile.enc" \
       --bot-bookmarks='[{"title":"Google","type":"url","url":"https://www.google.com"},{"title":"YouTube","type":"url","url":"https://www.youtube.com"}]'

Вложенная структура папок

chrome --bot-profile="/path/to/profile.enc" \
       --bot-bookmarks='[{"title":"Google","type":"url","url":"https://www.google.com"},{"title":"News","type":"folder","children":[{"title":"BBC","type":"url","url":"https://www.bbc.com"},{"title":"Reuters","type":"url","url":"https://www.reuters.com"}]},{"title":"Shopping","type":"folder","children":[{"title":"Amazon","type":"url","url":"https://www.amazon.com"}]}]'

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

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

const bookmarks = JSON.stringify([
  { title: 'Google', type: 'url', url: 'https://www.google.com' },
  { title: 'YouTube', type: 'url', url: 'https://www.youtube.com' },
  {
    title: 'News',
    type: 'folder',
    children: [
      { title: 'BBC', type: 'url', url: 'https://www.bbc.com' },
      { title: 'Reuters', type: 'url', url: 'https://www.reuters.com' },
    ],
  },
]);

(async () => {
  const browser = await puppeteer.launch({
    executablePath: '/path/to/botbrowser/chrome',
    args: [
      '--bot-profile=/path/to/profile.enc',
      `--bot-bookmarks=${bookmarks}`,
    ],
    headless: true,
    defaultViewport: null,
  });

  const page = await browser.newPage();
  await page.goto('https://example.com');
  console.log('Browser launched with pre-populated bookmarks');
  await browser.close();
})();

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

chrome --bot-profile="/path/to/profile.enc" \
       --bot-bookmarks='[{"title":"Google","type":"url","url":"https://www.google.com"},{"title":"Amazon","type":"url","url":"https://www.amazon.de"}]' \
       --bot-inject-random-history \
       --bot-cookies="@/path/to/cookies.json" \
       --bot-config-timezone=Europe/Berlin \
       --bot-config-locale=de-DE \
       --bot-config-languages=de-DE,de,en \
       --proxy-server=socks5://user:pass@de-proxy:1080

Верификация

После запуска с --bot-bookmarks проверьте наличие закладок:

const page = await browser.newPage();

// Перейти в менеджер закладок
await page.goto('chrome://bookmarks');

// Или проверить через API chrome.bookmarks в привилегированном контексте
// Закладки должны сразу появиться в панели закладок

Также можно проверить появление закладок в омнибоксе, набрав домен URL закладки и проверив, показывает ли подсказка запись закладки.

Bookmark Structure Bookmark Bar Google (url) News (folder) YouTube (url) BBC (url) Reuters (url)

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

  • Согласуйте закладки с идентичностью профиля. Профиль немецкого пользователя должен иметь немецкие закладки: google.de, spiegel.de, amazon.de.
  • Варьируйте закладки между идентичностями. Каждая идентичность браузера должна иметь уникальный набор закладок.
  • Сохраняйте реалистичное количество. Типичный пользователь имеет от 10 до 50 закладок. Чрезмерно большие или пустые наборы выглядят необычно.
  • Включайте разнообразие категорий. Реальные пользователи добавляют в закладки различные сайты: поисковики, новости, покупки, соцсети и рабочие ресурсы.
  • Используйте папки для организации. Реальные панели часто содержат папки: "Работа", "Покупки", "Новости".
  • Комбинируйте с другими флагами идентичности. Закладки лучше всего работают вместе с --bot-cookies, --bot-inject-random-history и настройками локали/часового пояса.

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

Какой JSON-формат принимает --bot-bookmarks?

Флаг принимает JSON-массив объектов закладок. Каждый объект имеет title, type ("url" или "folder") и либо url (для URL-типа), либо массив children (для типа folder). JSON передаётся как строка прямо в аргументе CLI.

Можно ли загрузить закладки из файла вместо встроенного JSON?

Флаг --bot-bookmarks принимает JSON-строку напрямую. Для больших наборов закладок сформируйте JSON-строку в скрипте автоматизации и передайте как аргумент запуска.

Когда закладки становятся доступными после запуска?

Закладки заполняются во время инициализации браузера, до загрузки страниц. Они сразу появляются в панели и менеджере закладок.

Сохраняются ли закладки между сессиями?

Закладки, загруженные через --bot-bookmarks, загружаются заново при каждом запуске. Если вы используете один и тот же --user-data-dir между сессиями, закладки, добавленные во время сессии, сохранятся, но --bot-bookmarks всегда применяет свои записи поверх.

Можно ли использовать --bot-bookmarks с --bot-inject-random-history?

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

Требуется ли определённый тариф для --bot-bookmarks?

Флаг --bot-bookmarks доступен в базовом пакете BotBrowser без ограничений по тарифу.

Сколько закладок следует включать?

Стремитесь к 10-50, соответствующим тому, что типичный пользователь накапливает со временем. Включайте сочетание популярных сайтов и нишевых ресурсов, соответствующих персоне профиля.

Резюме

Предзаполнение закладок через --bot-bookmarks добавляет реалистичный слой идентичности к сессиям BotBrowser. В сочетании с cookie, историей просмотров и согласованными настройками локали, закладки помогают создавать профили браузера, отражающие реальные паттерны использования, а не свежие установки.

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

#Bookmarks#Injection#Identity#Browser#Privacy

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

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