Mode de comportement deterministe du navigateur dans BotBrowser
Comment BotBrowser produit un comportement de navigateur coherent et reproductible entre les sessions via la configuration par profils et les flags d'execution.
Pourquoi le determinisme est important
Chaque session de navigateur introduit de petites variations dans le rendu, le timing et la generation de nombres aleatoires. Une identite de navigateur vraiment coherente necessite le controle de toutes les sources d'aleatoire.
Comment BotBrowser atteint le determinisme
BotBrowser controle le non-determinisme via la configuration par profils et les flags d'execution, au niveau du moteur du navigateur.
Identite materielle basee sur les profils
Le flag --bot-profile charge une empreinte complete de l'appareil :
chrome --bot-profile="/profiles/windows-chrome-122.enc" \
--user-data-dir="$(mktemp -d)"
Graine de bruit pour la coherence du rendu
Le flag --bot-noise-seed controle tout le bruit de rendu via un generateur de nombres aleatoires deterministe :
chrome --bot-profile="/profiles/windows-chrome-122.enc" \
--bot-noise-seed=42 \
--user-data-dir="$(mktemp -d)"
Controle du timing et de la pile
Des flags supplementaires controlent d'autres sources de variation :
chrome --bot-profile="/profiles/windows-chrome-122.enc" \
--bot-noise-seed=42 \
--bot-time-scale=1.0 \
--bot-stack-seed=profile \
--user-data-dir="$(mktemp -d)"
Configuration deterministe complete
chrome --bot-profile="/profiles/windows-chrome-122.enc" \
--bot-noise-seed=42 \
--bot-time-scale=1.0 \
--bot-stack-seed=profile \
--bot-config-noise-canvas=true \
--user-data-dir="/data/session-identity-a"
Chaque execution avec cette configuration produit des sorties d'empreinte identiques.
Verification
const { chromium } = require('playwright-core');
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/profiles/windows-chrome-122.enc',
'--bot-noise-seed=42',
'--bot-time-scale=1.0',
'--bot-stack-seed=profile',
],
headless: true,
});
const page = await (await browser.newContext()).newPage();
await page.goto('https://abrahamjuliot.github.io/creepjs/');
// Enregistrez tous les hashes d'empreinte, puis relancez avec les memes flags.
// Les hashes doivent correspondre exactement.
Pour commencer
- Telechargez BotBrowser depuis GitHub
- Choisissez un profil du depot de profils
- Configurez
--bot-noise-seed,--bot-time-scaleet--bot-stack-seedpour un determinisme complet - Verifiez avec les outils de test d'empreinte la coherence entre sessions