Retour au Centre de connaissances
Identité

Changement de marque : Chrome, Edge, Brave, Opera

Pourquoi User-Agent, Client Hints et navigator.userAgentData doivent indiquer une seule marque, et comment définir et vérifier une identité Chrome, Edge, Brave ou Opera.

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.

Limite de capacité de BotBrowser : BotBrowser peut aligner User-Agent, Client Hints, navigator.userAgentData, l'ordre des marques, GREASE et les versions de marque lorsqu'une marque est choisie au lancement. Il n'émule pas l'interface, les fonctions ni le comportement des extensions propres à une marque ; une instance en cours ne peut pas changer de marque sans en créer une nouvelle ; il ne garantit pas non plus l'acceptation ou le résultat de détection d'un site.

TL;DR

En bref (TL;DR) : Un changement de marque fiable modifie toutes les surfaces de marque ensemble. Définissez --bot-browser-brand au lancement, alignez les versions de Chromium et de la marque, puis vérifiez User-Agent, Client Hints et navigator.userAgentData. Une marque cohérente n'est qu'une partie d'une identité cohérente de profil, de paramètres régionaux, de plateforme et de réseau.

Résumé

Sommaire

Pourquoi une marque de navigateur incohérente se remarque facilement

La marque d'un navigateur est le nom du fabricant que le navigateur indique de lui-même : Google Chrome, Microsoft Edge, Brave, Opera ou simplement Chromium. La marque apparaît à plusieurs endroits à la fois, et la réponse à « quelle est cette marque ? » doit être la même partout. Une session qui annonce Microsoft Edge dans l'en-tête User-Agent, mais qui n'indique encore que Google Chrome dans Sec-CH-UA ou dans navigator.userAgentData, donne deux réponses différentes à une même question.

Cela compte pour la vie privée comme pour la simple utilisabilité. Les sites web et les services d'analyse utilisent la marque pour segmenter les visiteurs, décider des fonctions ou des messages à proposer et regrouper les sessions qui se ressemblent. Lorsque les signaux divergent, cette divergence rend le navigateur plus distinctif que n'importe quelle marque prise isolément, ce qui est l'inverse de l'objectif d'une configuration soucieuse de la vie privée. Elle provoque aussi des problèmes ordinaires, comme une page qui propose un message propre à Edge à une session dont les Client Hints annoncent Chrome.

Schéma montrant la chaîne User-Agent, les en-têtes Client Hints et navigator.userAgentData issus d'une même marque de navigateur choisie

Deux groupes de lecteurs rencontrent ce cas plus souvent que les autres. Les équipes qui testent le comportement d'un produit pour des utilisateurs d'Edge ou de Brave ont besoin que le navigateur s'identifie avec la marque testée. Les personnes qui gardent plusieurs identités de navigation séparées pour protéger leur vie privée ont besoin que chaque identité reste stable et cohérente en elle-même. Les deux objectifs reposent sur la cohérence plutôt que sur une valeur isolée, et un changement partiel les met facilement en défaut. Les favoris sont une autre partie d'une identité de navigation qui peut être préparée à l'avance, comme l'explique Injection de favoris : pré-remplir les favoris du navigateur.

Trois questions méritent d'être posées avant de changer de marque :

  • Quelles surfaces indiquent une marque, et changent-elles toutes ensemble ?
  • La version propre à la marque appartient-elle à la même version majeure de Chromium que le reste de l'identité ?
  • Les choix de profil, de réseau, de paramètres régionaux et de plateforme décrivent-ils toujours un navigateur cohérent ?

Les surfaces qui portent une identité de marque

Dans un navigateur basé sur Chromium, la marque s'exprime par la chaîne User-Agent, les en-têtes Client Hints, l'API navigator.userAgentData, l'ordre et la forme de la liste des marques, et les numéros de version rattachés à chaque entrée. Chacune est décrite ci-dessous.

La chaîne User-Agent

L'en-tête de requête User-Agent et navigator.userAgent portent la marque sous forme de jeton de produit à la fin de la chaîne. Tous les navigateurs basés sur Chromium conservent les jetons Chrome/ et Safari/537.36 pour la compatibilité, de sorte que le jeton du fabricant est la partie qui diffère :

Chrome : Mozilla/5.0 ... Chrome/142.0.7444.60 Safari/537.36
Edge   : Mozilla/5.0 ... Chrome/142.0.7444.60 Safari/537.36 Edg/142.0.3595.65
Brave  : Mozilla/5.0 ... Chrome/142.0.7444.60 Safari/537.36
Opera  : Mozilla/5.0 ... Chrome/142.0.7444.60 Safari/537.36 OPR/<version d'opera>

Brave n'a pas de jeton propre dans cette chaîne, de sorte que sa marque apparaît dans les Client Hints. C'est l'une des raisons pour lesquelles la seule chaîne ne suffit pas à savoir ce qu'un navigateur annonce.

Les en-têtes Client Hints

Les Client Hints sont le remplacement structuré de l'analyse de la chaîne User-Agent. Le mécanisme est défini dans la RFC 8942, et les indications d'agent utilisateur sont documentées sur MDN. Un petit ensemble d'indications à faible entropie, dont Sec-CH-UA, est envoyé par défaut avec les requêtes. Les valeurs plus détaillées, comme Sec-CH-UA-Full-Version-List, ne sont envoyées que lorsqu'un serveur les demande avec un en-tête de réponse Accept-CH. La valeur de Sec-CH-UA énumère des jetons de marque avec leur version majeure :

  • Chrome : "Chromium";v="142", "Google Chrome";v="142", "Not:A-Brand";v="99"
  • Edge : "Chromium";v="142", "Microsoft Edge";v="142", "Not:A-Brand";v="99"
  • Brave : "Chromium";v="142", "Brave";v="142", "Not:A-Brand";v="99"

L'API navigator.userAgentData

Le pendant JavaScript de la même information est navigator.userAgentData. Sa propriété brands reprend la liste à faible entropie de Sec-CH-UA, et getHighEntropyValues() renvoie une promesse avec les champs détaillés, comme fullVersionList, platform et platformVersion. Ce que dit l'en-tête, cette API doit le dire aussi :

navigator.userAgentData.brands;
// Chrome: [{brand: "Chromium", version: "142"}, {brand: "Google Chrome", version: "142"}, ...]
// Edge:   [{brand: "Chromium", version: "142"}, {brand: "Microsoft Edge", version: "142"}, ...]

Comme les valeurs à forte entropie ne sont renvoyées qu'à la demande, une incohérence peut rester invisible jusqu'à ce qu'un site les réclame. Une configuration qui semble correcte au premier chargement peut se contredire plus tard, c'est pourquoi les vérifications ci-dessous couvrent à la fois les valeurs par défaut et les valeurs détaillées. Pour voir comment les serveurs utilisent ces en-têtes comme signaux d’identité, consultez Client Hints Fingerprinting : en-têtes HTTP et identité, qui détaille ce que chaque indice révèle.

Ordre des jetons, entrées GREASE et calendrier des versions

Chromium ajoute à la liste des marques une entrée « GREASE » volontairement dépourvue de sens, afin que les serveurs ne s'appuient pas sur un format de liste figé. Son texte et sa position varient. Selon la documentation de BotBrowser, la liste des marques contient des jetons GREASE corrects ; la liste de Sec-CH-UA et celle de navigator.userAgentData.brands doivent donc concorder, dans le même ordre.

Le calendrier des versions est l'autre détail facile à rater. Chrome, Edge et Opera publient leurs versions selon des calendriers distincts. Chrome et Edge partagent la version majeure de Chromium, mais leurs versions complètes diffèrent : Chrome 142 peut être 142.0.7444.60, tandis que la version correspondante d'Edge est 142.0.3595.65. La valeur OPR/ d'Opera suit sa propre numérotation, pas celle de Chromium. Pour Chrome et Edge, une entrée de marque dont la version complète n'appartient pas à la version majeure de Chromium du reste de l'identité constitue une incohérence, même si tous les noms de jetons sont corrects.

Pourquoi remplacer seulement le User-Agent ne suffit pas

Les frameworks d'automatisation facilitent le changement de la chaîne. Playwright accepte une option userAgent à la création d'un contexte, et Puppeteer propose page.setUserAgent() :

// Playwright
const context = await browser.newContext({
  userAgent: 'Mozilla/5.0 ... Edg/142.0.3595.65',
});
// Puppeteer
await page.setUserAgent('Mozilla/5.0 ... Edg/142.0.3595.65');

Un remplacement limité à la chaîne modifie l'en-tête et navigator.userAgent. Si les métadonnées des Client Hints ne sont pas fournies séparément, les autres surfaces continuent d'annoncer la marque d'origine :

  • Sec-CH-UA énumère toujours les jetons de la marque d'origine.
  • navigator.userAgentData.brands renvoie toujours la liste d'origine.
  • Sec-CH-UA-Full-Version-List porte toujours les numéros de version d'origine.
  • Les valeurs renvoyées par getHighEntropyValues() décrivent toujours le navigateur d'origine.

Le résultat est une identité qui dit Edge à un endroit et Chrome à un autre. Fournir les métadonnées à la main comble une partie de l'écart, mais reporte le travail sur vous : l'ordre des jetons, l'entrée GREASE, les versions complètes ainsi que chaque page, worker et requête doivent être maintenus alignés manuellement, et une liste écrite à la main se trompe facilement sur un détail. Pour approfondir la manière dont l’en-tête, les Client Hints et navigator.userAgentData doivent concorder, consultez User-Agent et Client Hints : garder une identité cohérente, qui traite de la définition et de la vérification d’une identité personnalisée.

Un remplacement maintenu à la main vieillit aussi mal. Quand la version majeure de Chromium change, chaque chaîne et chaque numéro de version codés en dur dans un script deviennent obsolètes, et la mise à jour suivante peut laisser le User-Agent sur une version pendant que les Client Hints restent sur une autre. Un réglage de marque unique, appliqué partout par le navigateur, évite ce suivi manuel. Le passage des chaînes User-Agent complètes aux Client Hints est présenté dans Migrer de User-Agent Reduction vers Client Hints.

Toute approche qui réécrit une surface à la fois pose le même problème de fond. Une règle d'en-tête dans une extension, un remplacement de chaîne dans un framework et un script qui modifie une propriété couvrent chacun leur surface, et rien ne garantit que les surfaces restent d'accord. La solution fiable consiste à choisir la marque une seule fois, au départ, et à faire dériver toutes les surfaces de ce choix.

Définir la marque au lancement avec BotBrowser

L'option --bot-browser-brand de BotBrowser (ENT Tier2 ; la valeur webview requiert ENT Tier3) sélectionne la marque au démarrage du navigateur. Selon la documentation de BotBrowser, sa définition ajuste ensemble la chaîne User-Agent, la liste des marques de navigator.userAgentData, les en-têtes Client Hints et les valeurs associées, et le résultat reste cohérent dans le thread principal, dans les Workers et dans les en-têtes des requêtes HTTP.

SurfaceSuit la marque choisie
En-tête User-AgentOui
navigator.userAgentOui
En-tête Sec-CH-UAOui
Sec-CH-UA-Full-Version-ListOui
navigator.userAgentData.brandsOui
getHighEntropyValues()Oui
Entrée GREASEOui

Valeurs de marque prises en charge

MarqueValeur de l'optionRemarques
ChromechromeIdentité par défaut basée sur Chromium
EdgeedgeMicrosoft Edge avec le jeton Edg/
BravebraveIdentité du navigateur Brave
OperaoperaOpera avec le jeton OPR/
ChromiumchromiumIdentité Chromium simple, sans marque de fabricant
WebViewwebviewAndroid WebView (ENT Tier3)

Aligner la version de la marque sur celle de Chromium

Lorsque vous passez à Edge ou à Opera, la version complète du fabricant doit correspondre à la version de Chromium du profil. Deux options pilotent cela, et la documentation recommande que les deux partagent le même numéro de version majeure. Le numéro OPR/ propre à Opera suit la numérotation d'Opera :

  • --bot-brand-full-version définit la version complète propre à la marque, par exemple 142.0.3595.65 pour Edge.
  • --bot-ua-full-version définit la version complète de Chromium, par exemple 142.0.7444.60.
chrome --bot-profile="path/to/profile.enc" \
       --bot-browser-brand=edge \
       --bot-ua-full-version=142.0.7444.60 \
       --bot-brand-full-version=142.0.3595.65

Exemples de lancement pour Edge, Brave et Opera

En ligne de commande, chaque marque est une seule option placée à côté du profil. Associez-la à un fuseau horaire, à des paramètres régionaux et à une route réseau qui conviennent à l'identité que vous présentez :

# Identité Edge, paramètres régionaux américains
chrome --bot-profile="path/to/profile.enc" \
       --bot-browser-brand=edge \
       --bot-timezone=America/New_York \
       --bot-locale=en-US
# Identité Brave, paramètres régionaux britanniques
chrome --bot-profile="path/to/profile.enc" \
       --bot-browser-brand=brave \
       --bot-timezone=Europe/London \
       --bot-locale=en-GB
# Identité Opera
chrome --bot-profile="path/to/profile.enc" \
       --bot-browser-brand=opera

Playwright et Puppeteer transmettent les mêmes options par leur paramètre args. La documentation précise que l'option de marque doit figurer dans args, et non dans une option propre au framework, ce qui est une cause fréquente d'une marque qui ne change pas :

const { chromium } = require('playwright-core');
const browser = await chromium.launch({
  executablePath: 'path/to/botbrowser/chrome',
  headless: false,
  args: ['--bot-profile=path/to/profile.enc', '--bot-browser-brand=edge', '--bot-brand-full-version=142.0.3595.65'],
});

Un exemple concret montre ce qu'il faut attendre. Supposons que le profil utilise Chromium 142 et que vous vouliez une identité Edge. Vous lancez avec --bot-browser-brand=edge, --bot-ua-full-version=142.0.7444.60 et --bot-brand-full-version=142.0.3595.65. La chaîne User-Agent se termine alors par Edg/142.0.3595.65, Sec-CH-UA énumère Microsoft Edge à côté de Chromium avec la version majeure 142, et fullVersionList présente les versions complètes de Chromium et d'Edge comme des entrées séparées. Si l'un de ces trois éléments ne concorde pas avec les autres, l'une des options de version est absente ou incohérente.

Identité WebView

Une identité Android WebView (ENT Tier3) demande plus que la marque. Combinez la marque webview avec un modèle de User-Agent et les paramètres de plateforme Android d'un profil Android. Des marqueurs comme {platform-version} et {model} sont remplis à partir des options correspondantes, et BotBrowser génère les valeurs correspondantes de navigator.userAgentData et des Client Hints :

chrome --bot-profile="path/to/android-profile.enc" \
       --bot-browser-brand=webview \
       --user-agent="Mozilla/5.0 (Linux; Android {platform-version}; {model} Build/TP1A.220624.021; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/{ua-full-version} Mobile Safari/537.36" \
       --bot-platform=Android \
       --bot-platform-version=13 \
       --bot-model=SM-G991B \
       --bot-mobile=true

Garder plusieurs marques séparées

Lorsqu'une même machine sert plusieurs identités, donnez à chacune son propre profil et son propre répertoire de données utilisateur, et définissez la marque par identité afin que rien ne passe de l'une à l'autre :

chrome --bot-profile="profiles/chrome-user.enc" \
       --bot-browser-brand=chrome \
       --user-data-dir="/tmp/chrome-session"
chrome --bot-profile="profiles/edge-user.enc" \
       --bot-browser-brand=edge \
       --user-data-dir="/tmp/edge-session"

La documentation décrit aussi la définition d'une marque différente pour chaque contexte de navigation à sa création (ENT Tier3). Dans les deux cas, la marque est choisie à la création de l'instance ou du contexte, donc la changer implique d'en démarrer un nouveau.

Vérifier qu'une seule marque apparaît partout

Après le lancement, vous pouvez vérifier le résultat dans le navigateur lui-même, sans outil supplémentaire. Ouvrez les outils de développement sur une page quelconque et parcourez cette liste :

  1. La chaîne User-Agent contient le bon jeton de fabricant (Edg/ pour Edge, OPR/ pour Opera).
  2. L'en-tête de requête Sec-CH-UA énumère les jetons de marque attendus.
  3. navigator.userAgentData.brands correspond à l'en-tête.
  4. fullVersionList montre la version propre à la marque à côté de celle de Chromium, et, pour Chrome et Edge, les deux partagent le même numéro majeur. La version de marque d'Opera suit la numérotation propre à Opera.
  5. Aucun autre nom de marque n'apparaît, hormis le jeton de base Chromium que toutes les marques basées sur Chromium incluent.

Pour les valeurs visibles par les scripts, collez trois lignes dans la console :

navigator.userAgent;
navigator.userAgentData.brands;
await navigator.userAgentData.getHighEntropyValues(['fullVersionList', 'platform', 'platformVersion']);

Pour l'en-tête, ouvrez le panneau Réseau, sélectionnez une requête HTTPS de niveau supérieur et lisez les en-têtes de la requête. Les en-têtes détaillés, comme Sec-CH-UA-Full-Version-List, n'apparaissent que lorsque le site les demande avec Accept-CH, de sorte que leur absence lors d'une première requête est normale et ne signale pas une incohérence. Si vos pages démarrent des workers, exécutez les mêmes lignes de console dans le contexte du worker pour confirmer qu'il annonce la même marque que la page.

Une liste de contrôle réussie montre que le navigateur est cohérent avec lui-même. Elle ne montre pas comment un site donné traitera la session, car les sites combinent de nombreux éléments et modifient leurs propres règles au fil du temps. Utilisez la liste pour confirmer votre configuration, et gardez le reste de l'identité, comme le profil, la route réseau et les paramètres régionaux, tout aussi cohérent pour le rendu, l'affichage, la langue et les métadonnées de requête.

Quand quelque chose semble faux, le symptôme indique généralement la cause :

SymptômeCause probableCe qu'il faut ajuster
La chaîne UA indique Edg/ mais la liste des marques ne nomme que Google ChromeSeule la chaîne a été modifiéeDéfinir la marque au lancement plutôt que remplacer la chaîne
La version d'Edge dans fullVersionList ressemble à celle de ChromeLa version propre à la marque n'a pas été définieAjouter --bot-brand-full-version
Pour Edge, la version majeure de Chromium diffère entre la chaîne UA et la listeLes deux options de version ne partagent pas la même version majeureAligner --bot-ua-full-version et --bot-brand-full-version sur le profil
La marque ne change jamaisL'option a été donnée comme option du frameworkLa passer dans args
La marque diffère de celle du profilLes options de ligne de commande ont priorité sur le profilRetirer l'option ou mettre à jour le profil

Répétez la vérification après chaque changement du profil, de la version de Chromium ou des options de marque, car chacun peut déplacer une surface sans déplacer les autres.

Une observation reproductible du comportement public de Chromium

Ce petit dispositif rend la limite visible sans prétendre avoir exécuté BotBrowser. La page enregistre navigator.userAgent, la liste de marques à faible entropie et fullVersionList; le serveur enregistre User-Agent et Sec-CH-UA, puis demande l'indication détaillée avec Accept-CH. Dans le modèle documenté de Chromium, la première requête peut contenir la marque à faible entropie sans Sec-CH-UA-Full-Version-List; une seconde requête peut contenir la liste détaillée. Une substitution limitée à la chaîne ne met pas forcément à jour les métadonnées structurées.

const observation = {
  ua: navigator.userAgent,
  brands: navigator.userAgentData?.brands ?? null,
  high: navigator.userAgentData ? await navigator.userAgentData.getHighEntropyValues(['fullVersionList']) : null,
};
console.table(observation);
Point observéRésultat attenduValeur diagnostique
Requête initialeUser-Agent et Sec-CH-UA à faible entropieRepère une substitution UA avant la demande des indications détaillées
Requête après Accept-CHSec-CH-UA-Full-Version-List peut apparaîtreDistingue l'absence d'opt-in d'une divergence de version
Script de la pagebrands et fullVersionList correspondent aux en-têtesDétecte une règle d'en-tête qui n'a pas modifié JavaScript

Cette observation s'appuie sur l'API NavigatorUAData de MDN et la spécification Client Hints, sans décrire un profil BotBrowser particulier. Elle est reproductible avec Chromium standard: la même marque et la même version majeure doivent apparaître dans les trois lignes.

À retenir

Considérez la marque comme un élément d'une identité complète plutôt que comme un interrupteur isolé :

  • Gardez les versions alignées. Utilisez --bot-brand-full-version pour que la version du fabricant appartienne à la version majeure de Chromium de votre profil.
  • Partez d'un profil adapté. Un profil capturé sur un vrai navigateur Edge, combiné à --bot-browser-brand=edge, donne le résultat le plus cohérent.
  • Faites correspondre les réglages environnants. La marque, le fuseau horaire, les paramètres régionaux, la langue et la route réseau doivent décrire le même type d'utilisateur.
  • Conservez une seule marque pendant toute la vie d'une identité. Changer de marque entre deux visites sur le même site crée un historique incohérent.
  • Refaites la liste de contrôle après les mises à jour du navigateur ou du profil.

L'option n'est pas toujours nécessaire. Un profil chargé porte déjà une marque cohérente, donc laisser --bot-browser-brand non défini est la façon la plus simple de rester cohérent. Utilisez l'option quand vous avez une raison de présenter une autre marque, par exemple pour reproduire un cas d'assistance propre à Edge ou pour donner à une seconde identité sa propre marque, puis confirmez aussi les options de version. Chaque réglage supplémentaire est une valeur de plus à maintenir alignée avec le reste, donc ne changez que ce que la tâche exige.

Quelques questions pratiques reviennent souvent :

  • Le changement de marque modifie-t-il les fonctionnalités du navigateur ? Non. Il met à jour des valeurs d'identité, pas l'interface du navigateur. Les fonctions propres à chaque marque, comme les boucliers de Brave ou la barre latérale d'Edge, ne sont pas émulées.
  • Peut-on utiliser n'importe quelle marque avec n'importe quel profil ? Pour les marques autres que WebView, tout profil compatible peut être utilisé ; l'option remplace la marque de ce profil et les options de ligne de commande ont la priorité la plus élevée. WebView reste soumis aux réglages Android de plateforme, de modèle et de mobile présentés plus haut.
  • Que se passe-t-il sans l'option ? La marque enregistrée dans le profil chargé est utilisée, et Chrome est la valeur par défaut si le profil n'en définit aucune.
  • La marque affecte-t-elle les extensions ? La documentation ne décrit aucun effet sur les extensions ; testez celles dont vous dépendez après un changement de marque.
  • La marque peut-elle changer pendant l'exécution du navigateur ? Non. Elle est définie au lancement ou à la création d'un contexte, donc il faut une nouvelle instance pour une autre marque.
  • WebView est-il différent ? Oui. Il demande aussi les réglages de plateforme, de modèle et de mobile présentés plus haut.

Avec BotBrowser, vous pouvez changer la marque du navigateur au lancement avec --bot-browser-brand (chrome, edge, brave, opera, chromium ou webview) et définir une version propre à la marque avec --bot-brand-full-version, afin que le User-Agent, les marques de navigator.userAgentData et les en-têtes Client Hints changent ensemble au lieu de diverger. BotBrowser n'émule pas l'interface ni les fonctionnalités propres à chaque marque. Il ne peut pas changer la marque d'une instance ou d'un contexte en cours d'exécution, car la marque est définie à la création de l'instance ou du contexte, et il ne peut pas garantir la façon dont un site traitera l'identité obtenue.

Pour les détails sur le User-Agent et les Client Hints, appliquez les vérifications de cet article et gardez les paramètres géographiques alignés sur la marque choisie.

Sources

#marque du navigateur#Chrome#Edge#Brave#Identity

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.