Injection d'historique : generer un historique realiste
Comment injecter un historique de navigation realiste dans les profils de navigateur, avec prise en charge du controle personnalise de la profondeur d'historique.
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.
Introduction
Chaque vrai navigateur accumule un historique de navigation au fil du temps. Le bouton retour a un endroit ou aller, history.length est superieur a un, et le magasin d'historique interne du navigateur contient des entrees s'etalant sur des jours ou des semaines. Un navigateur fraichement lance sans historique se distingue de celui avec une trace d'utilisation naturelle. Pour la recherche sur la vie privee, les tests et la gestion multi-comptes, l'etat de l'historique de navigation est un element important de l'identite globale du navigateur.
BotBrowser fournit le flag --bot-inject-random-history (tier PRO) pour peupler la session du navigateur avec un historique de navigation synthetique au lancement. L'historique genere inclut des entrees de sites web populaires avec des horodatages varies, creant une trace d'utilisation realiste qui existe avant que toute automatisation ne commence. Ce flag fonctionne aux cotes d'autres signaux d'identite comme --bot-cookies et --bot-bookmarks pour creer des sessions de navigateur qui semblent naturellement utilisees des le depart.
Impact sur la vie privee : pourquoi l'historique de navigation est important
La propriete history.length est accessible a tout JavaScript s'executant sur une page. Une session de navigateur fraiche commence toujours avec un history.length de 1 (la page actuelle). Un navigateur avec un historique de navigation anterieur a une valeur plus elevee. Ce simple nombre revele si le navigateur a ete utilise avant dans la session actuelle.
Au-dela de history.length, le comportement global d'un navigateur sans historique differe de celui avec un etat accumule. Les modeles de navigation, la disponibilite des boutons retour/avant et le comportement de restauration de session dependent tous de l'etat de l'historique. Les chercheurs en vie privee etudiant l'empreinte de navigateur doivent controler ce signal pour creer des environnements de test coherents et reproductibles.
Pour la gestion multi-comptes, chaque identite devrait sembler avoir un historique de navigation independant qui reflete une utilisation naturelle. Un navigateur qui commence toujours avec un historique vierge ressemble a une installation fraiche, ce qui n'est pas la facon dont la plupart des utilisateurs interagissent avec leurs navigateurs. L'ajout d'un historique synthetique cree une identite plus complete qui est coherente avec les autres signaux fournis par le profil.
Contexte technique
Comment fonctionne l'historique de navigation dans Chromium
Chromium maintient l'historique de navigation dans une base de donnees SQLite dans le repertoire de donnees utilisateur. Cette base de donnees stocke :
- URL visitees : l'URL complete de chaque page visitee
- Horodatages des visites : quand chaque page a ete consultee, avec une precision a la microseconde
- Nombre de visites : combien de fois chaque URL a ete visitee
- Types de transition : comment l'utilisateur est arrive a la page (saisi, clic sur un lien, redirection, etc.)
- Referrers : quelle page a conduit a la visite
La propriete history.length en JavaScript reflete le nombre d'entrees dans l'historique de session de l'onglet actuel (la pile retour/avant), pas l'historique de navigation total. Cependant, l'etat global de la base de donnees d'historique affecte des fonctionnalites comme les suggestions de l'omnibox (barre d'adresse), les tuiles "Plus visites" sur la page Nouvel onglet et l'interface de recherche d'historique a chrome://history.
Historique de session vs. historique global
Il y a une distinction importante entre deux types d'historique :
L'historique de session est par onglet et suit la navigation retour/avant dans un seul onglet. C'est ce avec quoi history.length, history.back() et history.forward() interagissent. Il se reinitialise lorsque l'onglet est ferme.
L'historique global est l'enregistrement a l'echelle du navigateur de toutes les URL visitees dans tous les onglets et sessions. Il est stocke dans la base de donnees d'historique et persiste entre les redemarrages du navigateur (sauf si l'utilisateur l'efface).
Le flag --bot-inject-random-history de BotBrowser peuple la base de donnees d'historique global, donnant au navigateur une trace d'historique realiste qui apparait dans chrome://history et influence les suggestions de l'omnibox.
Approches courantes et leurs limites
Navigation scriptee
La facon la plus directe de creer un historique de navigation est de visiter reellement des sites web avant de commencer la tache reelle. Cela signifie naviguer vers une liste d'URL, attendre que chacune se charge, puis proceder a l'automatisation. Cette approche fonctionne mais a des inconvenients significatifs :
- Cout en temps : le chargement de 20 a 50 pages prend des dizaines de secondes a des minutes, selon la complexite de la page et la vitesse du reseau
- Surcout reseau : chaque chargement de page genere du vrai trafic reseau, consomme de la bande passante du proxy et peut declencher une limitation de debit
- Effets secondaires : les vrais chargements de page executent du JavaScript, definissent des cookies, declenchent des evenements d'analyse et peuvent declencher des systemes de pistage avant que la tache reelle ne commence
- Non deterministe : les temps de chargement de page, les redirections et le contenu dynamique rendent le processus de generation d'historique imprevisible
Reutilisation du repertoire de donnees utilisateur
Reutiliser un --user-data-dir qui contient deja un historique d'une session precedente preserve l'historique de navigation automatiquement. Cependant, cela preserve egalement tout autre etat (cache, cookies, stockage local, service workers), ne vous donnant aucun controle granulaire sur quels signaux conserver et lesquels reinitialiser.
JavaScript history.pushState
L'API history.pushState() peut ajouter des entrees a l'historique de session sans navigation, mais elle ne fonctionne que dans la meme origine et n'affecte que l'historique de session de l'onglet actuel. Elle n'ajoute pas d'entrees a la base de donnees d'historique de navigation global et n'affecte pas les suggestions de l'omnibox.
L'approche de BotBrowser
Le flag --bot-inject-random-history de BotBrowser genere un historique de navigation synthetique au moment du lancement, avant tout chargement de page. Cette approche evite les problemes de performance et d'effets secondaires de la navigation scriptee tout en produisant un etat d'historique realiste.
Trois modes de fonctionnement
Le flag prend en charge trois modes (mise a jour mars 2026) :
--bot-inject-random-historyou--bot-inject-random-history=true: injecte un nombre aleatoire d'entrees d'historique (2-7). C'est le comportement par defaut.--bot-inject-random-history=15: injecte exactement 15 entrees d'historique. La valeur resultante dehistory.lengthsera 16 (15 entrees injectees + la page actuelle). Vous pouvez specifier n'importe quel entier positif.--bot-inject-random-history=false: desactive completement l'injection d'historique.
La syntaxe ={number} vous donne un controle precis sur la profondeur de l'historique, ce qui est utile lorsqu'une valeur specifique de history.length est requise pour la coherence entre les sessions.
Ce qui est genere
Le flag produit des entrees d'historique qui incluent :
- Sites web populaires : des entrees de domaines bien connus qu'un utilisateur typique visiterait
- Horodatages varies : les visites sont reparties sur une plage de temps realiste, pas regroupees a un seul moment
- Domaines divers : l'historique genere couvre plusieurs categories (recherche, actualites, reseaux sociaux, shopping) pour refleter des modeles de navigation naturels
- Nombre de visites realiste : certaines URL apparaissent plusieurs fois, imitant le schema des sites frequemment visites
Population au niveau du moteur
Les entrees d'historique sont inserees dans la base de donnees d'historique du navigateur pendant l'initialisation. Cela signifie qu'elles sont disponibles avant que tout contexte de navigateur ne soit cree et avant tout chargement de page. L'omnibox, chrome://history et la page Nouvel onglet refletent tous l'historique peuple immediatement.
Aucun surcout reseau
Parce que l'historique est genere synthetiquement plutot que par des visites reelles de pages, il n'y a pas de trafic reseau, pas de chargement de pages et pas d'execution JavaScript. La population de l'historique ajoute un temps de demarrage negligeable par rapport a la navigation scriptee.
Fonctionne avec des repertoires de donnees utilisateur neufs
Le flag fonctionne avec de nouveaux repertoires --user-data-dir. Vous n'avez pas besoin de preparer ou d'alimenter le repertoire a l'avance. Chaque lancement avec un repertoire temporaire neuf et --bot-inject-random-history produit un nouvel ensemble d'entrees d'historique.
Configuration et utilisation
Utilisation CLI de base
# Historique aleatoire (2-7 entrees)
chrome --bot-profile="/path/to/profile.enc" \
--bot-inject-random-history \
--user-data-dir="$(mktemp -d)"
# Nombre exact : injecter 15 entrees (history.length = 16)
chrome --bot-profile="/path/to/profile.enc" \
--bot-inject-random-history=15 \
--user-data-dir="$(mktemp -d)"
Integration Puppeteer
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
// Utilisez =N pour un nombre exact, ou omettez la valeur pour aleatoire (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 + page actuelle)
await browser.close();
})();
Integration Playwright
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
// Utilisez =N pour un nombre exact, ou omettez la valeur pour aleatoire (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();
})();
Configuration d'identite complete
Combinez l'historique avec les favoris, les cookies et les parametres de locale pour une identite complete :
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
Verification
Apres le lancement avec --bot-inject-random-history, verifiez que l'historique a ete peuple :
const page = await browser.newPage();
// Verifier la longueur de l'historique de session (devrait etre > 1 apres navigation)
await page.goto('https://example.com');
const historyLength = await page.evaluate(() => history.length);
console.log('Session history length:', historyLength);
// Naviguer vers la page d'historique pour voir l'historique global
await page.goto('chrome://history');
// La page d'historique devrait afficher les entrees de l'historique synthetique
Bonnes pratiques
- Utilisez un repertoire de donnees utilisateur neuf par session. Chaque session devrait commencer avec son propre repertoire de donnees pour eviter de transporter un etat non souhaite :
--user-data-dir="$(mktemp -d)" - Combinez avec --bot-always-active. Le flag
--bot-always-active(tier PRO, active par defaut) maintient les fenetres dans un etat actif, rendant la session plus semblable a une navigation active. - Faites correspondre l'historique a l'identite. Lorsque vous utilisez l'historique avec des flags de locale et de fuseau horaire, la combinaison cree une identite coherente.
- Combinez avec --bot-bookmarks. Les favoris et l'historique ensemble creent une identite de navigateur plus complete que chacun seul.
- Ne vous fiez pas uniquement a history.length pour la verification. L'historique de session et l'historique global sont differents. Verifiez
chrome://historypour une vue complete.
Questions frequemment posees
Quels sites web apparaissent dans l'historique genere ?
L'historique genere inclut des entrees de sites web populaires et bien connus dans plusieurs categories. Les entrees specifiques sont variees pour creer un modele de navigation realiste.
L'historique genere correspond-il a la locale du profil ?
La generation d'historique produit un ensemble general de sites web populaires mondiaux. Pour un historique specifique a la locale, les entrees generees sont complementees par les parametres de locale et de fuseau horaire que vous fournissez via d'autres flags.
Puis-je controler quelles URL apparaissent dans l'historique ?
Le flag --bot-inject-random-history genere l'historique automatiquement. Pour des listes d'URL personnalisees, vous utiliseriez la navigation scriptee ou la gestion du repertoire de donnees utilisateur a la place.
Cela affecte-t-il history.length en JavaScript ?
Le flag peuple l'historique de navigation global (la base de donnees chrome://history). La propriete history.length en JavaScript reflete l'historique de session de l'onglet actuel, qui commence a 1 pour un nouvel onglet. Apres avoir navigue vers des pages, history.length s'incremente normalement.
Quel tier est requis pour --bot-inject-random-history ?
Le flag --bot-inject-random-history est disponible au tier PRO.
Puis-je l'utiliser avec Docker ou des deploiements de serveur headless ?
Oui. Le flag fonctionne dans tous les environnements de deploiement, y compris les conteneurs Docker et les serveurs Linux headless. Aucun affichage ou interface graphique n'est requis pour la generation d'historique.
Comment cela interagit-il avec --user-data-dir ?
Si vous fournissez un repertoire temporaire neuf, l'historique est genere a partir de zero. Si vous reutilisez un repertoire existant, l'historique synthetique est ajoute aux cotes de tout historique existant dans ce repertoire.
Comment controler la valeur exacte de history.length ?
Utilisez la syntaxe ={number}. Par exemple, --bot-inject-random-history=15 injecte exactement 15 entrees d'historique, donc apres avoir navigue vers une page, history.length sera 16 (15 injectees + 1 page actuelle). C'est utile lorsque vous avez besoin d'une profondeur d'historique specifique et reproductible sur plusieurs sessions. Sans le suffixe ={number}, le flag injecte un nombre aleatoire entre 2 et 7.
Resume
Le flag --bot-inject-random-history ajoute un historique de navigation realiste aux sessions BotBrowser sans le surcout et les effets secondaires de la navigation scriptee. Combine avec les favoris, les cookies et la configuration de locale, il cree des identites de navigateur avec des traces d'utilisation completes.
Pour des sujets connexes, consultez Gestion des cookies pour la persistance de session, Pre-population des favoris pour la configuration des favoris, et Gestion des profils pour l'organisation des ensembles d'identites.
Articles Connexes
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.