Retour au Centre de connaissances
Identité

Injection de favoris : pré-remplir les favoris du navigateur

Comment pré-remplir les favoris au lancement avec une valeur JSON, pour que les sessions de test partent d'un état de favoris documenté et reproductible.

BotBrowser Team

Documentation

Vous préférez la doc produit maintenue ?

Cet article a une page équivalente dans le centre de documentation. Utilisez les docs pour le flux canonique, les flags à jour et la référence durable.

BotBrowser peut initialiser un état de favoris documenté, mais il ne peut pas obliger un site à l'interpréter ou lui faire confiance. Ce guide traite les favoris comme une entrée de l'état du navigateur, avec des limites explicites de confidentialité et de reproductibilité.

Résumé

  • Gardez le JSON court, vérifiable et associé à un profil nommé.
  • Vérifiez l'arbre obtenu dans le navigateur, pas seulement le succès du lancement.
  • Les favoris ne prouvent pas une identité et ne garantissent pas le comportement d'un site.

Sommaire

Pourquoi une barre de favoris vide est un point de départ inégal

Un navigateur utilisé tous les jours accumule des favoris pendant des semaines et des mois. Ils sont rangés en dossiers et reflètent la région, le travail et les centres d'intérêt de la personne. Une instance lancée à neuf pour l'automatisation ou la recherche sur la confidentialité démarre avec une barre de favoris vide, un état différent de celui que décrit le reste du profil. Si le profil indique un développeur germanophone à Berlin, une barre vide est une petite incohérence dans une configuration par ailleurs cohérente.

BotBrowser fournit le drapeau --bot-bookmarks pour pré-remplir le magasin de favoris au démarrage du navigateur. Le drapeau accepte un tableau JSON d'entrées url et folder, de sorte que chaque session de test peut partir d'un état de favoris que vous avez écrit et que vous pouvez reproduire.

Les favoris, une couche parmi d'autres de l'état du navigateur

Une session de navigateur porte plusieurs couches d'état : cookies, localStorage, IndexedDB, historique de navigation, locale, fuseau horaire, configuration réseau et favoris. Chaque couche est une donnée distincte et peut être réglée séparément. Les favoris comptent parmi les couches les plus simples à contrôler : ce sont des données ordinaires à la structure réduite, qui ne changent pas pendant l'exécution d'un script sauf si quelque chose y écrit.

Pour les chercheurs en confidentialité, maîtriser l'état des favoris est important pour des expériences reproductibles. Si vous comparez le comportement d'un site avec un navigateur tout neuf et avec un navigateur doté d'un peu d'historique, vous devez savoir précisément quel état différait entre les deux exécutions. Écrire l'ensemble de favoris dans les arguments de lancement transforme une différence invisible en une différence consignée, que vous pouvez relire, versionner et répéter.

Pour les équipes qui gèrent plusieurs identités, chacune gagne à avoir un ensemble de favoris cohérent avec le reste de son profil. Un profil en allemand, avec un fuseau horaire de Berlin et une locale allemande, se raisonne plus facilement quand ses favoris pointent vers des sites allemands. Un profil de développeur se raisonne plus facilement avec des favoris techniques. L'objectif est une configuration cohérente et documentée. Ce n'est pas une promesse sur la réaction d'un site web.

Les barres de favoris vides posent aussi un problème pratique dans certains flux de travail. Si vous devez exercer des éléments d'interface liés aux favoris, comme la barre, le gestionnaire ou les suggestions de l'omnibox, un magasin pré-rempli vous donne de la matière dès le premier chargement de page.

Comment Chromium stocke les favoris

Le fichier Bookmarks

Chromium stocke les favoris dans un fichier JSON nommé Bookmarks, dans le dossier du profil au sein du répertoire de données utilisateur, par exemple Default/Bookmarks. Le fichier contient une arborescence dont les nœuds racines incluent bookmark_bar, affiché dans la barre de favoris, et other, le dossier « Autres favoris » (un nœud racine synced contient les favoris du mobile). Les pages Chrome et BotBrowser citées à la fin de cet article ne documentent pas ce format sur disque ; considérez donc les noms de champs ci-dessous comme du contexte et vérifiez-les dans un fichier Bookmarks de votre propre dossier de profil.

Chaque entrée de l'arborescence possède ces propriétés :

  • name : Le texte affiché dans la barre ou le gestionnaire de favoris
  • url : L'URL cible pour les favoris de type URL
  • type : url pour un favori ou folder pour un dossier contenant des enfants
  • children : Un tableau de favoris et de dossiers imbriqués (pour les entrées de type dossier)
  • date_added : Un horodatage indiquant le moment de création du favori

Au lancement, le navigateur lit ce fichier et remplit la barre et le gestionnaire de favoris. Chromium conserve aussi des métadonnées internes pour chaque entrée, comme un identifiant et un horodatage dans son format interne. Ces métadonnées expliquent pourquoi les fichiers Bookmarks écrits à la main se trompent facilement de façon subtile.

Où apparaissent les favoris pré-remplis

Les favoris apparaissent à plusieurs endroits du navigateur :

  1. Barre de favoris : L'emplacement le plus visible, sous la barre d'adresse lorsqu'elle est activée
  2. Gestionnaire de favoris : Accessible via chrome://bookmarks
  3. Suggestions de l'omnibox : La barre d'adresse peut suggérer des URL en favoris pendant la saisie

Le gestionnaire de favoris est l'endroit le plus fiable pour confirmer une entrée pré-remplie, car il liste toute l'arborescence, dossiers compris. Les autres emplacements dépendent des réglages de l'interface.

Pré-remplir des favoris sans le drapeau

Modifier le fichier Bookmarks à la main

Vous pouvez créer un répertoire de données utilisateur, écrire ou modifier le fichier JSON Bookmarks, puis lancer le navigateur avec ce répertoire. Cela fonctionne, mais a des coûts :

  • Le format comprend des champs de métadonnées, comme des identifiants et des horodatages au format interne de Chromium, qui doivent être corrects
  • Vous devez gérer explicitement les répertoires de données utilisateur et suivre quel répertoire correspond à quelle identité
  • Il n'y a pas de séparation nette entre les données de favoris et les autres états persistés dans le même répertoire

Utiliser l'API chrome.bookmarks

L'API chrome.bookmarks peut créer des favoris par programmation, mais la documentation de Chrome la présente comme une API d'extension. Elle n'est pas disponible pour le JavaScript ordinaire d'une page ni pour les frameworks d'automatisation. L'utiliser suppose d'installer une extension et de lui accorder la permission sur les favoris, ce qui ajoute un composant à maintenir, à relire et à synchroniser entre les identités.

Piloter l'interface de favoris depuis un framework

Ni Playwright ni Puppeteer n'exposent d'API de favoris. Avec ces frameworks, la seule voie intégrée consiste à ouvrir chrome://bookmarks et à cliquer dans l'interface, ce qui est lent et fragile, et à recommencer pour chaque nouvelle session.

Fonctionnement de --bot-bookmarks

BotBrowser gère le pré-remplissage des favoris avec le drapeau --bot-bookmarks, si bien qu'aucune des trois voies ci-dessus n'est nécessaire.

Remplissage au lancement

Lorsque --bot-bookmarks est passé, BotBrowser lit la valeur JSON et remplit le magasin de favoris du navigateur au démarrage. Les entrées sont alors disponibles dans le gestionnaire de favoris et partout où votre configuration affiche des favoris.

Le format JSON

Le drapeau accepte une chaîne JSON décrivant la structure des favoris :

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

Chaque entrée a un title et un type. Une entrée url demande aussi un url, et une entrée folder demande un tableau children contenant d'autres entrées. La documentation publique Bookmark Seeding décrit les champs ainsi :

  • title (obligatoire) : Nom affiché du favori ou du dossier
  • type (obligatoire) : url ou folder
  • url (obligatoire pour les entrées url) : L'URL du favori
  • children (obligatoire pour les entrées folder) : Tableau d'entrées enfants

Les dossiers peuvent contenir d'autres dossiers, de sorte qu'une structure comme Travail, puis Projets, puis des liens individuels s'exprime en une seule valeur.

Aucune extension en jeu

Comme le remplissage se fait dans le navigateur au démarrage, aucune extension n'est à installer ni à maintenir. L'ensemble des extensions installées reste celui que vous avez choisi, et l'état des favoris est entièrement décrit par les arguments de lancement.

Avec les autres réglages d'identité

Les favoris se combinent naturellement avec les autres réglages de lancement. Une configuration d'identité complète peut inclure des favoris, des cookies, un historique de navigation, un fuseau horaire, une locale et une configuration réseau, chacun réglé explicitement pour que la session soit cohérente en interne.

Lancer, valider et vérifier des favoris pré-remplis

Une barre courte

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

Dossiers imbriqués

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

Depuis 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');
  await browser.close();
})();

Exemple combiné avec d'autres réglages d'identité

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

Dans cette combinaison, tous les réglages régionaux pointent vers l'Allemagne : les favoris, le fuseau horaire, la locale, la liste de langues et la sortie réseau. L'exemple montre que les couches s'accordent entre elles. Il ne garantit pas la façon dont un site traitera la session.

Parmi ces drapeaux, --bot-cookies et --bot-inject-random-history sont PRO, et --bot-timezone, --bot-locale et --bot-languages sont ENT Tier1 ; la combinaison complète exige donc un forfait qui les inclut. --bot-bookmarks lui-même est Core.

Construire le JSON sans erreurs de guillemets

Une source fréquente de problèmes avec --bot-bookmarks est la valeur JSON elle-même. Trois habitudes aident à en éviter l'essentiel.

D'abord, n'écrivez pas le JSON à la main dans une commande shell dès qu'il dépasse quelques entrées. Construisez une structure de données ordinaire dans votre script et sérialisez-la avec JSON.stringify(), comme le fait l'exemple Puppeteer. La documentation Bookmark Seeding donne le même conseil : utilisez JSON.stringify() pour construire la valeur et ne l'enveloppez pas dans des guillemets supplémentaires.

Ensuite, lorsque vous écrivez la valeur dans un shell, entourez-la de guillemets simples pour que les guillemets doubles du JSON survivent. Un titre contenant une apostrophe casse cet encadrement, une raison de plus de sérialiser depuis le code.

Enfin, validez la structure avant le lancement. Un petit contrôle détecte les deux erreurs que la documentation cite comme causes typiques de favoris absents : des entrées sans title ou type, et des dossiers dont le tableau children contient des entrées invalides.

function validateBookmarks(entries, path = 'root') {
  if (!Array.isArray(entries)) throw new Error(`${path}: expected an array`);
  entries.forEach((entry, index) => {
    const where = `${path}[${index}]`;
    if (!entry.title) throw new Error(`${where}: missing title`);
    if (entry.type === 'url') {
      if (!entry.url) throw new Error(`${where}: url entries need a url`);
    } else if (entry.type === 'folder') {
      if (!Array.isArray(entry.children)) throw new Error(`${where}: folder entries need a children array`);
      validateBookmarks(entry.children, `${where}.children`);
    } else {
      throw new Error(`${where}: type must be "url" or "folder"`);
    }
  });
  return entries;
}

const bookmarks = JSON.stringify(validateBookmarks(entries));

Exécuter le contrôle avant chaque lancement transforme un dossier vide et silencieux en message d'erreur indiquant le chemin de l'entrée fautive. Dans une matrice de tests qui lance beaucoup de sessions, c'est la différence entre une correction rapide et une longue recherche dans les résultats.

Choisir des ensembles de favoris par identité

Les favoris pré-remplis fonctionnent mieux lorsqu'ils suivent les mêmes décisions que le reste du profil. Une façon pratique de rester maître de l'ensemble est de définir à un seul endroit un ensemble nommé par identité et de le consulter au lancement :

const sets = {
  de: [
    { title: 'Google', type: 'url', url: 'https://www.google.de' },
    { title: 'Spiegel', type: 'url', url: 'https://www.spiegel.de' },
    { title: 'Amazon', type: 'url', url: 'https://www.amazon.de' },
  ],
  us: [
    { title: 'Google', type: 'url', url: 'https://www.google.com' },
    { title: 'Reuters', type: 'url', url: 'https://www.reuters.com' },
    { title: 'Amazon', type: 'url', url: 'https://www.amazon.com' },
  ],
};

const args = ['--bot-profile=path/to/profile.enc', `--bot-bookmarks=${JSON.stringify(sets[identity])}`];

Quelques consignes pour construire les ensembles :

  • Choisissez des sites qu'une personne de cette région, de cette langue et de ce rôle enregistrerait de façon plausible, comme un média national, un commerçant local ou un site de documentation.
  • Utilisez le domaine régional lorsqu'il existe. Une identité allemande qui pointe vers un commerçant allemand s'explique plus facilement que celle qui ne pointe que vers le site mondial.
  • Gardez des ensembles assez petits pour être relus. Dix à cinquante entrées forment une plage gérable à la main, et un ensemble court se compare mieux d'une exécution à l'autre.
  • Utilisez des dossiers là où la personne en utiliserait, par exemple un dossier de travail pour un développeur ou un dossier d'achats pour un profil de consommateur.
  • Conservez chaque ensemble sous gestion de versions, à côté de la configuration de lancement, pour pouvoir toujours rattacher un résultat à l'état exact des favoris qui l'a produit.

Un exemple concret montre comment cela s'intègre à un plan de test. Supposons que vous souhaitiez comparer deux exécutions de la même page : l'une avec une barre de favoris vide, l'autre avec l'ensemble allemand ci-dessus. Lancez les deux avec le même profil, le même fuseau horaire et la même locale, ne changez que la valeur de --bot-bookmarks, et gardez les deux commandes dans vos notes. Ouvrez chrome://bookmarks dans chaque exécution pour confirmer que l'état différait réellement, puis comparez le résultat que vous étudiez. S'ils sont identiques, vous avez appris que l'état des favoris n'a pas joué pour cette page. S'ils diffèrent, vous disposez d'une différence documentée et reproductible à approfondir. Les deux résultats sont utiles, et aucun n'oblige à deviner.

Considérez les ensembles comme la description de la persona que vous avez décidé de tester. Ils ne prouvent pas qu'un site lit ou pondère les favoris, et rien dans le drapeau n'y change quoi que ce soit.

Vérifier le résultat après le lancement

Après un lancement avec --bot-bookmarks, ouvrez le gestionnaire de favoris et comparez-le à la valeur passée :

const page = await browser.newPage();
await page.goto('chrome://bookmarks');

Une courte liste aide à garder la comparaison rigoureuse :

  1. Ouvrez chrome://bookmarks et confirmez que chaque entrée de premier niveau de votre JSON est présente, puis vérifiez que l'ordre correspond à celui que vous attendez.
  2. Dépliez chaque dossier et confirmez que le nombre d'enfants correspond au tableau children.
  3. Regardez la barre de favoris elle-même. Si les réglages de l'interface la masquent, les favoris peuvent tout de même exister dans le gestionnaire.
  4. Saisissez dans la barre d'adresse le domaine d'une URL pré-remplie et regardez si la liste de suggestions affiche l'entrée de favori.
  5. Notez la valeur exacte de lancement à côté du résultat, pour pouvoir répéter l'exécution.

Arborescence des favoris : une barre avec deux entrées url et un dossier Actualités contenant deux entrées url.

Si quelque chose manque, les étapes de dépannage documentées sont courtes. Lorsque les favoris n'apparaissent pas, vérifiez que le JSON est valide et que chaque entrée a les champs title et type. Lorsqu'un dossier s'affiche vide, assurez-vous que son tableau children contient des entrées valides. Lorsque le navigateur signale une erreur d'analyse JSON, construisez la valeur avec JSON.stringify() et n'ajoutez pas de guillemets autour.

Limites et habitudes à conserver

  • Faites correspondre les favoris à l'identité du profil. Un profil allemand devrait avoir des favoris en allemand comme google.de, spiegel.de et amazon.de.
  • Variez les favoris entre les identités. Chaque identité devrait avoir son propre ensemble, pour que les résultats ne soient pas partagés par accident entre personas.
  • Gardez un nombre relisible. Les très grands ensembles sont difficiles à auditer, et un ensemble vide ôte tout l'intérêt du pré-remplissage.
  • Mélangez les catégories. On enregistre des pages de recherche, d'actualités, d'achats, de réseaux sociaux et de travail. Un ensemble varié décrit mieux une persona qu'une seule catégorie.
  • Utilisez des dossiers pour l'organisation. Des dossiers comme Travail, Achats ou Actualités sont courants et exercent le format imbriqué.
  • Réglez explicitement les autres couches. Les favoris fonctionnent avec --bot-cookies, --bot-inject-random-history et les réglages de locale et de fuseau horaire. Chacun est son propre drapeau.

BotBrowser prend en charge le drapeau --bot-bookmarks, qui remplit le magasin de favoris du navigateur au lancement à partir d'un tableau JSON d'entrées url et folder, afin que vous puissiez donner à chaque session de test un état de favoris documenté et reproductible, sans extension. Il ne peut pas garantir la façon dont un site web ou un système de suivi traite l'état des favoris, il ne remplace pas les cookies, l'historique ni les autres couches d'identité, et la persistance au-delà de la session dépend de votre répertoire de données utilisateur.

Questions sur le pré-remplissage des favoris

Quel format JSON accepte --bot-bookmarks ?

Validez la chaîne avant le lancement : title et type sont présents dans chaque entrée, tandis que url désigne un lien et children un dossier. Une valeur mal formée doit être rejetée avant de démarrer le profil, afin de distinguer une erreur de fixture d'un problème de navigation.

Puis-je charger les favoris depuis un fichier au lieu du JSON en ligne ?

La référence CLI documente --bot-bookmarks comme prenant une chaîne JSON. Pour des ensembles plus grands, lisez votre fichier de favoris dans votre script de lancement, validez-le et passez la valeur sérialisée en argument.

Quand les favoris sont-ils disponibles après le lancement ?

BotBrowser remplit le magasin de favoris au démarrage à partir de la valeur passée. Ouvrez chrome://bookmarks pour confirmer le contenu.

Les favoris persistent-ils entre les sessions ?

Selon la documentation Bookmark Seeding, les favoris persistent pendant la durée de la session et sont stockés dans le répertoire de données utilisateur avec les autres données de session. Ce qui est conservé pour une session ultérieure dépend donc du répertoire de données utilisateur utilisé. Donnez à chaque identité son propre répertoire si vous voulez garder leurs états de favoris séparés.

Puis-je l'utiliser avec --bot-inject-random-history ?

Oui. Les deux drapeaux règlent des couches différentes, les favoris et l'historique de navigation, et vous pouvez les passer ensemble dans un même lancement.

Est-ce que --bot-bookmarks nécessite un niveau spécifique ?

La référence CLI classe --bot-bookmarks parmi les drapeaux Core. Consultez la page des drapeaux CLI pour la disponibilité actuelle de chaque drapeau.

Combien de favoris dois-je inclure ?

Assez pour décrire la persona et peu pour pouvoir les relire à la main. Dix à cinquante entrées réparties en quelques catégories est une plage pratique pour une identité de test. Le bon nombre dépend de ce que vous testez.

Pré-remplir des favoris change-t-il la façon dont les sites traitent la session ?

Ne le supposez pas. BotBrowser règle l'état des favoris du navigateur. Il n'affirme pas qu'un site web ou un système de suivi lit ou pondère cet état, et l'API chrome.bookmarks est une API d'extension dans la documentation de Chrome, pas quelque chose qu'utilise le JavaScript des pages.

Ce qu'il faut retenir

Pré-remplir les favoris avec --bot-bookmarks donne à chaque session BotBrowser un état de favoris écrit, relisible et reproductible. Combiné aux cookies, à l'historique de navigation et à des réglages de locale cohérents, il garde sous votre contrôle une couche de plus d'une identité de test. Vérifiez le résultat dans chrome://bookmarks, conservez le JSON sous gestion de versions et traitez la fonction comme une couche d'état parmi d'autres.

Pour les sujets connexes, consultez Gestion des cookies pour la persistance de session, Historique de navigation synthétique pour le remplissage de l'historique, et Gestion des profils pour l'organisation d'ensembles d'identités complets.

Conclusion pratique

Utilisez le pré-remplissage pour rendre une entrée de l'état du navigateur explicite et reproductible, puis vérifiez l'arbre visible en ne conservant que les métadonnées nécessaires. BotBrowser contrôle l'entrée de lancement, pas ce que chaque site affiche ou observe.

Sources

#Bookmarks#Injection#Identity#Browser#confidentialité

Cet article fait partie du guide : Surfaces d’identité du navigateur : vue de cohérence pratique

Faites passer BotBrowser de la recherche à la production

Utilisez ces guides pour comprendre le modèle, puis passez à la validation multi-plateforme, aux contextes isolés et au déploiement navigateur prêt pour l'échelle.