Identidad

Inyeccion de marcadores: prellenar en el navegador

Cómo prellenar marcadores del navegador programáticamente para identidades de navegador completas y realistas en flujos de trabajo automatizados.

Documentación

Prefieres la documentación del producto mantenida?

Este artículo tiene una página equivalente en el centro de documentación. Usa los docs para el flujo canónico, las flags actuales y la referencia duradera.

Introducción

Un navegador real carga historial. Tiene marcadores guardados durante semanas y meses, organizados en carpetas, que reflejan los intereses y hábitos del usuario. Cuando lanzas una instancia de navegador nueva para automatización o investigación de privacidad, la barra de marcadores vacía es una de las muchas señales que la distinguen de un navegador con historial de uso genuino. Los marcadores son parte de la capa de identidad más amplia que hace que una sesión de navegador parezca vivida en lugar de recién creada.

BotBrowser proporciona el flag --bot-bookmarks para prellenar la barra de marcadores al lanzar una instancia del navegador. Esto te permite crear sesiones que incluyen datos de marcadores realistas desde la primera carga de página. Combinado con otros flags de identidad como --bot-cookies y --bot-inject-random-history, los marcadores contribuyen a una identidad de navegador completa que es consistente en todas las capas.

Impacto en la privacidad: Por qué importan los marcadores

Los sistemas de rastreo recopilan muchas señales para construir un perfil del navegador con el que interactúan. Aunque las cookies y las huellas son las más comúnmente discutidas, las señales de comportamiento y estado también juegan un papel. La presencia o ausencia de marcadores, el número de entradas en el historial de navegación y el estado de la barra de marcadores contribuyen a la imagen general de una sesión de navegador.

Para los investigadores de privacidad, controlar el estado de los marcadores es importante para experimentos reproducibles. Si estás probando si un sistema de rastreo se comporta diferente para visitantes nuevos versus recurrentes, necesitas controlar cada aspecto del estado del navegador, incluyendo los marcadores. Para la gestión de múltiples cuentas, cada identidad se beneficia de un conjunto único de marcadores que se alinee con el resto de su perfil: un perfil en alemán debería tener marcadores en alemán, un perfil de desarrollador debería tener marcadores técnicos, etc.

Las barras de marcadores vacías también son un problema práctico. Algunos flujos de trabajo requieren interactuar con elementos de UI relacionados con marcadores o probar cómo responden los sitios web a la API chrome.bookmarks. Prellenar marcadores proporciona un punto de partida realista para estos escenarios.

Antecedentes técnicos

Cómo almacena Chromium los marcadores

Chromium almacena los marcadores en un archivo JSON llamado Bookmarks dentro del directorio de datos del usuario, específicamente bajo la carpeta del perfil (ej. Default/Bookmarks). Este archivo contiene una estructura de árbol con dos nodos raíz: bookmark_bar (visible en la barra de marcadores) y other (la carpeta "Otros marcadores").

Cada entrada de marcador tiene estas propiedades:

  • name/title: El texto mostrado en la barra de marcadores o el gestor
  • url: La URL de destino para marcadores tipo URL
  • type: Ya sea url para un marcador o folder para una carpeta con hijos
  • children: Un array de marcadores y carpetas anidados (para entradas tipo carpeta)
  • date_added: Una marca de tiempo representando cuándo se creó el marcador

Cuando el navegador se inicia, lee este archivo y llena la barra de marcadores y el gestor de marcadores. Las extensiones y JavaScript ejecutándose en contextos privilegiados pueden consultar los marcadores a través de la API chrome.bookmarks.

Visibilidad de marcadores

Los marcadores aparecen en varios lugares dentro del navegador:

  1. Barra de marcadores: La ubicación más visible, mostrada debajo de la barra de direcciones cuando está habilitada
  2. Gestor de marcadores: Accesible a través de chrome://bookmarks
  3. Página Nueva Pestaña: Algunas configuraciones muestran sitios frecuentemente marcados
  4. Sugerencias del Omnibox: La barra de direcciones puede sugerir URLs marcadas mientras escribes

Prellenar marcadores a través de --bot-bookmarks asegura que aparezcan en todas estas ubicaciones consistentemente.

Enfoques comunes y sus limitaciones

Editar manualmente el archivo de marcadores

Puedes crear un directorio de datos de usuario, crear o editar manualmente el archivo JSON Bookmarks, y luego lanzar el navegador con ese directorio. Esto funciona pero tiene varios inconvenientes:

  • El formato del archivo Bookmarks incluye campos de metadatos (GUIDs, marcas de tiempo date_added en formato interno de Chromium) que deben ser correctos
  • Necesitas gestionar directorios de datos de usuario explícitamente, rastreando qué directorio pertenece a qué identidad
  • No hay una separación limpia entre datos de marcadores y otro estado persistido en el directorio

Usando la API chrome.bookmarks

La API chrome.bookmarks permite crear marcadores programáticamente, pero solo está disponible para extensiones del navegador, no para JavaScript regular de página o frameworks de automatización. Esto significa que necesitarías instalar una extensión para gestionar marcadores, lo que añade complejidad e introduce una señal detectable (la propia extensión).

Enfoques a nivel de framework

Ni Playwright ni Puppeteer proporcionan una API nativa de marcadores. La única forma integrada de gestionar marcadores a través de estos frameworks es navegando a chrome://bookmarks e interactuando con la UI, lo cual es lento y frágil.

Enfoque de BotBrowser

BotBrowser maneja la prellenado de marcadores a nivel del motor a través del flag --bot-bookmarks. Este enfoque evita las limitaciones de las alternativas descritas arriba.

Prellenado a nivel del motor

Cuando se pasa --bot-bookmarks al lanzamiento, BotBrowser llena el almacén de marcadores durante la inicialización del navegador, antes de que se cargue cualquier página y antes de que se cree cualquier contexto de navegador. Los marcadores están inmediatamente disponibles en la barra de marcadores, el gestor de marcadores y las sugerencias del omnibox.

Formato JSON

El flag --bot-bookmarks acepta una cadena JSON que describe la estructura de marcadores:

--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"}]}]'

La estructura soporta:

  • Marcadores URL: Objetos con title, type: "url" y url
  • Carpetas: Objetos con title, type: "folder" y un array children con marcadores y carpetas anidados
  • Anidamiento ilimitado: Las carpetas pueden contener otras carpetas a cualquier profundidad

Sin extensión requerida

Debido a que el prellenado de marcadores ocurre a nivel del motor, no se necesita ninguna extensión. Esto elimina la superficie de detección que crearía una extensión de gestión de marcadores.

Combinado con otras señales de identidad

Los marcadores se integran naturalmente con otros flags de identidad de BotBrowser. Una configuración de identidad completa podría incluir marcadores, cookies, historial de navegación, zona horaria, locale y configuración de proxy, todo trabajando junto para crear una sesión de navegador consistente.

Configuración y uso

Uso básico en CLI

# Barra de marcadores simple con algunas entradas
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"}]'

Estructura de carpetas anidadas

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"}]}]'

Integración con 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();
})();

Configuración completa de identidad

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

Verificación

Después de lanzar con --bot-bookmarks, verifica que los marcadores estén presentes:

const page = await browser.newPage();

// Navigate to bookmark manager
await page.goto('chrome://bookmarks');

// Or check via the chrome.bookmarks API in a privileged context
// Bookmarks should appear in the bookmark bar immediately

También puedes verificar que los marcadores aparezcan en el omnibox escribiendo el dominio de una URL marcada y comprobando si la sugerencia muestra la entrada del marcador.

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

Mejores prácticas

  • Asocia los marcadores con la identidad del perfil. Un perfil de usuario alemán debería tener marcadores en alemán como google.de, spiegel.de y amazon.de.
  • Varía los marcadores entre identidades. Cada identidad de navegador debería tener un conjunto único de marcadores para crear perfiles distintos.
  • Mantén el conteo realista. Un usuario típico tiene de 10 a 50 marcadores. Conjuntos de marcadores extremadamente grandes o vacíos se ven inusuales.
  • Incluye una mezcla de categorías. Los usuarios reales marcan una variedad de sitios: motores de búsqueda, noticias, compras, redes sociales y páginas relacionadas con el trabajo.
  • Usa carpetas para organización. Las barras de marcadores reales frecuentemente tienen carpetas como "Trabajo", "Compras" o "Noticias". Incluir carpetas añade realismo.
  • Combina con otros flags de identidad. Los marcadores funcionan mejor junto con --bot-cookies, --bot-inject-random-history y configuración de locale/zona horaria.

Preguntas frecuentes

¿Qué formato JSON acepta --bot-bookmarks?

El flag acepta un array JSON de objetos de marcador. Cada objeto tiene un title, type (ya sea "url" o "folder") y un url (para tipos URL) o un array children (para tipos carpeta). El JSON se pasa como cadena directamente en el argumento CLI.

¿Puedo cargar marcadores desde un archivo en lugar de JSON en línea?

El flag --bot-bookmarks acepta una cadena JSON directamente. Para conjuntos grandes de marcadores, construye la cadena JSON en tu script de automatización y pásala como argumento de lanzamiento.

¿Cuándo están disponibles los marcadores después del lanzamiento?

Los marcadores se llenan durante la inicialización del navegador, antes de que se cargue cualquier página. Aparecen en la barra de marcadores y el gestor de marcadores inmediatamente.

¿Los marcadores persisten entre sesiones?

Los marcadores llenados a través de --bot-bookmarks se cargan frescos cada vez que el navegador se lanza. Si usas el mismo --user-data-dir entre sesiones, cualquier marcador añadido durante la sesión persistirá en ese directorio, pero --bot-bookmarks siempre aplica sus entradas encima.

¿Puedo usar --bot-bookmarks con --bot-inject-random-history?

Sí. Estos flags son complementarios. Combinarlos crea una sesión de navegador con marcadores e historial de navegación, que juntos crean una identidad de navegador más completa.

¿--bot-bookmarks requiere un tier específico?

El flag --bot-bookmarks está disponible en el paquete base de BotBrowser sin restricción de tier.

¿Cuántos marcadores debería incluir?

Apunta a 10 a 50 marcadores, coincidiendo con lo que un usuario típico acumula con el tiempo. Incluye una mezcla de sitios comunes (motores de búsqueda, email, redes sociales) y sitios de nicho que coincidan con la persona del perfil.

Resumen

Prellenar marcadores con --bot-bookmarks añade una capa de identidad realista a las sesiones de BotBrowser. Combinado con cookies, historial de navegación y configuraciones de locale consistentes, los marcadores ayudan a crear perfiles de navegador que reflejan patrones de uso genuinos en lugar de instalaciones nuevas.

Para temas relacionados, consulta Gestión de cookies para persistencia de sesión, Historial de navegación sintético para prellenado de historial, y Gestión de perfiles para organizar conjuntos de identidad completos.

#Bookmarks#Injection#Identity#Browser#Privacy

Lleva BotBrowser de la investigación a producción

Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.