Volver al Centro de conocimiento
Identidad

Cambio de marca: Chrome, Edge, Brave, Opera

Por qué User-Agent, Client Hints y navigator.userAgentData deben coincidir en una sola marca de navegador, y cómo fijar y comprobar una identidad Chrome, Edge, Brave u Opera.

BotBrowser Team

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.

Límite de capacidad de BotBrowser: BotBrowser puede alinear User-Agent, Client Hints, navigator.userAgentData, el orden de las marcas, GREASE y las versiones de marca cuando se selecciona una marca al iniciar. No emula la interfaz, las funciones ni el comportamiento de extensiones propios de una marca; una instancia en ejecución no puede cambiar de marca sin crear una nueva; tampoco garantiza la aceptación ni el resultado de detección de un sitio.

TL;DR

Resumen (TL;DR): Un cambio de marca fiable modifica todas las superficies de marca a la vez. Define --bot-browser-brand al iniciar, alinea las versiones de Chromium y de la marca y verifica User-Agent, Client Hints y navigator.userAgentData. Una marca coherente es solo una parte de una identidad consistente de perfil, locale, plataforma y red.

Resumen

Contenido

Por qué una marca de navegador mezclada se nota enseguida

La marca de un navegador es el nombre del fabricante que el propio navegador comunica: Google Chrome, Microsoft Edge, Brave, Opera o simplemente Chromium. La marca aparece en varios lugares a la vez, y la respuesta a «¿qué marca es esta?» debe ser la misma en todos. Una sesión que indica Microsoft Edge en la cabecera User-Agent, pero que sigue listando solo Google Chrome en Sec-CH-UA o en navigator.userAgentData, da dos respuestas distintas a una misma pregunta.

Esto importa tanto para la privacidad como para la simple usabilidad. Los sitios web y los servicios de analítica usan la información de marca para segmentar visitantes, decidir qué funciones o avisos mostrar y agrupar sesiones parecidas. Cuando las señales no coinciden, esa discrepancia hace que el navegador sea más distintivo que cualquier marca por sí sola, justo lo contrario de lo que busca una configuración orientada a la privacidad. También provoca problemas cotidianos, como una página que muestra un aviso propio de Edge a una sesión cuyos Client Hints dicen Chrome.

Diagrama en el que la cadena User-Agent, los encabezados Client Hints y navigator.userAgentData derivan de una única marca de navegador elegida

Dos grupos de lectores se topan con esto con más frecuencia. Los equipos que prueban cómo se comporta un producto para usuarios de Edge o Brave necesitan que el navegador se identifique con la marca que están probando. Las personas que mantienen varias identidades de navegación separadas por motivos de privacidad necesitan que cada identidad sea estable y coherente en sí misma. Ambos objetivos dependen de la coherencia y no de un valor aislado, y ambos se estropean con facilidad con un cambio parcial. Los marcadores son otra parte de una identidad de navegación que puede prepararse de antemano, como se explica en Inyección de marcadores: prellenar los marcadores del navegador.

Conviene hacerse tres preguntas antes de cambiar una marca:

  • ¿Qué superficies informan de una marca y cambian todas a la vez?
  • ¿La versión propia de la marca corresponde a la misma versión principal de Chromium que el resto de la identidad?
  • ¿Las decisiones de perfil, red, configuración regional y plataforma siguen describiendo un navegador coherente?

Las superficies que transportan una identidad de marca

En un navegador basado en Chromium, la marca se expresa mediante la cadena User-Agent, las cabeceras Client Hints, la API navigator.userAgentData, el orden y la forma de la lista de marcas, y los números de versión asociados a cada entrada. A continuación se describe cada una.

La cadena User-Agent

La cabecera de solicitud User-Agent y navigator.userAgent llevan la marca como un token de producto al final de la cadena. Todos los navegadores basados en Chromium conservan los tokens Chrome/ y Safari/537.36 por compatibilidad, así que lo que cambia es el token del fabricante:

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/<versión de opera>

Brave no tiene un token propio en esta cadena, por lo que su marca aparece en Client Hints. Es una razón por la que revisar solo la cadena no basta para saber qué informa un navegador.

Las cabeceras Client Hints

Client Hints son el reemplazo estructurado del análisis de la cadena User-Agent. El mecanismo está definido en el RFC 8942 y las pistas de agente de usuario están documentadas en MDN. Un conjunto pequeño de pistas de baja entropía, entre ellas Sec-CH-UA, se envía por defecto en las solicitudes. Los valores más detallados, como Sec-CH-UA-Full-Version-List, solo se envían cuando el servidor los pide con una cabecera de respuesta Accept-CH. El valor de Sec-CH-UA enumera tokens de marca con su versión principal:

  • 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"

La API navigator.userAgentData

La versión de JavaScript de esta misma información es navigator.userAgentData. Su propiedad brands refleja la lista de baja entropía de Sec-CH-UA, y getHighEntropyValues() devuelve una promesa con los campos detallados, como fullVersionList, platform y platformVersion. Lo que diga la cabecera debe decirlo también esta API:

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

Como los valores de alta entropía solo se devuelven bajo petición, una discrepancia puede pasar desapercibida hasta que un sitio los solicita. Una configuración que parece correcta en la primera carga puede contradecirse más tarde, y por eso las comprobaciones siguientes cubren tanto los valores por defecto como los detallados. Para ver cómo los servidores usan estas cabeceras como señales de identidad, consulta Client Hints Fingerprinting: encabezados HTTP e identidad, que explica qué revela cada pista.

Orden de tokens, entradas GREASE y calendario de versiones

Chromium añade a la lista de marcas una entrada «GREASE» intencionadamente sin significado para que los servidores no dependan de un formato de lista fijo. Su texto y su posición varían. Según la documentación de BotBrowser, la lista de marcas incluye tokens GREASE correctos, así que la lista de Sec-CH-UA y la de navigator.userAgentData.brands deben coincidir entre sí, en el mismo orden.

El calendario de versiones es el otro detalle que se falla con facilidad. Chrome, Edge y Opera publican versiones con calendarios propios. Chrome y Edge comparten la versión principal de Chromium, pero sus versiones completas difieren: Chrome 142 puede ser 142.0.7444.60, mientras que la compilación equivalente de Edge es 142.0.3595.65. El valor OPR/ de Opera sigue su numeración propia, no la de Chromium. En Chrome y Edge, una entrada de marca cuya versión completa no corresponde a la versión principal de Chromium del resto de la identidad es una discrepancia, aunque todos los nombres de token sean correctos.

Por qué no basta con sustituir el User-Agent

Los frameworks de automatización facilitan cambiar la cadena. Playwright acepta una opción userAgent al crear un contexto y Puppeteer ofrece 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');

Una sustitución solo de la cadena cambia la cabecera y navigator.userAgent. Si los metadatos de Client Hints no se indican por separado, las demás superficies siguen informando de la marca original:

  • Sec-CH-UA sigue enumerando los tokens de la marca original.
  • navigator.userAgentData.brands sigue devolviendo la lista original.
  • Sec-CH-UA-Full-Version-List sigue con los números de versión originales.
  • Los valores devueltos por getHighEntropyValues() siguen describiendo el navegador original.

El resultado es una identidad que dice Edge en un lugar y Chrome en otro. Aportar los metadatos a mano cierra parte de la brecha, pero traslada el trabajo a quien configura: el orden de los tokens, la entrada GREASE, las versiones completas y cada página, worker y solicitud deben mantenerse alineados manualmente, y una lista escrita a mano es fácil de equivocar por un detalle. Para profundizar en cómo deben coincidir la cabecera, Client Hints y navigator.userAgentData, consulta User-Agent y Client Hints: una identidad coherente, que trata cómo definir y comprobar una identidad personalizada.

Una sustitución mantenida a mano también envejece mal. Cuando cambia la versión principal de Chromium, cada cadena y cada número de versión escritos en un script quedan obsoletos, y la siguiente actualización puede dejar el User-Agent en una versión mientras los Client Hints permanecen en otra. Un único ajuste de marca que el navegador aplica en todas partes evita ese trabajo de mantenimiento. El paso de las cadenas User-Agent completas a Client Hints se describe en Migración de User-Agent Reduction a Client Hints.

Cualquier método que reescriba una superficie cada vez tiene el mismo problema de fondo. Una regla de cabeceras en una extensión, una sustitución de cadena en un framework y un script que edita una propiedad cubren cada uno su propia superficie, y nada garantiza que las superficies sigan coincidiendo. La solución fiable es elegir la marca una vez, al principio, y hacer que todas las superficies deriven de esa elección.

Fijar la marca al iniciar con BotBrowser

La opción --bot-browser-brand de BotBrowser (ENT Tier2; el valor webview requiere ENT Tier3) selecciona la marca cuando arranca el navegador. Según la documentación de BotBrowser, al fijarla se ajustan juntos la cadena User-Agent, la lista de marcas de navigator.userAgentData, las cabeceras Client Hints y los valores relacionados, y el resultado se mantiene coherente en el hilo principal, en los Workers y en las cabeceras de las solicitudes HTTP.

SuperficieSigue la marca elegida
Cabecera User-AgentSí
navigator.userAgentSí
Cabecera Sec-CH-UASí
Sec-CH-UA-Full-Version-ListSí
navigator.userAgentData.brandsSí
getHighEntropyValues()Sí
Entrada GREASESí

Valores de marca admitidos

MarcaValor de la opciónNotas
ChromechromeIdentidad predeterminada basada en Chromium
EdgeedgeMicrosoft Edge con el token Edg/
BravebraveIdentidad del navegador Brave
OperaoperaOpera con el token OPR/
ChromiumchromiumIdentidad Chromium simple sin marca de fabricante
WebViewwebviewAndroid WebView (ENT Tier3)

Alinear la versión de la marca con la de Chromium

Al cambiar a Edge u Opera, la versión completa del fabricante debe encajar con la versión de Chromium del perfil. Dos opciones controlan esto, y la documentación recomienda que ambas compartan el mismo número de versión principal. El número OPR/ propio de Opera sigue la numeración de Opera:

  • --bot-brand-full-version fija la versión completa propia de la marca, por ejemplo 142.0.3595.65 para Edge.
  • --bot-ua-full-version fija la versión completa de Chromium, por ejemplo 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

Ejemplos de inicio para Edge, Brave y Opera

En la línea de comandos, cada marca es una sola opción junto al perfil. Combínala con una zona horaria, un idioma regional y una ruta de red que correspondan a la identidad que presentas:

# Identidad Edge, configuración regional de EE. UU.
chrome --bot-profile="path/to/profile.enc" \
       --bot-browser-brand=edge \
       --bot-timezone=America/New_York \
       --bot-locale=en-US
# Identidad Brave, configuración regional del Reino Unido
chrome --bot-profile="path/to/profile.enc" \
       --bot-browser-brand=brave \
       --bot-timezone=Europe/London \
       --bot-locale=en-GB
# Identidad Opera
chrome --bot-profile="path/to/profile.enc" \
       --bot-browser-brand=opera

Playwright y Puppeteer pasan las mismas opciones mediante su parámetro args. La documentación indica que la opción de marca va en args y no en una opción propia del framework, una causa frecuente de que la marca no cambie:

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 ejemplo práctico muestra qué esperar. Supón que el perfil usa Chromium 142 y quieres una identidad Edge. Inicias con --bot-browser-brand=edge, --bot-ua-full-version=142.0.7444.60 y --bot-brand-full-version=142.0.3595.65. La cadena User-Agent termina entonces en Edg/142.0.3595.65, Sec-CH-UA enumera Microsoft Edge junto a Chromium con la versión principal 142, y fullVersionList muestra las versiones completas de Chromium y de Edge como entradas separadas. Si alguno de esos tres elementos no coincide con los demás, falta una de las opciones de versión o es incoherente.

Identidad WebView

Una identidad Android WebView (ENT Tier3) necesita más que la marca. Combina la marca webview con una plantilla de User-Agent y los ajustes de plataforma Android de un perfil Android. Marcadores como {platform-version} y {model} se completan a partir de las opciones correspondientes, y BotBrowser genera los valores equivalentes de navigator.userAgentData y de 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

Mantener varias marcas separadas

Cuando una misma máquina atiende varias identidades, da a cada una su propio perfil y su propio directorio de datos de usuario, y fija la marca por identidad para que nada pase de una a otra:

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 documentación describe además fijar una marca distinta para cada contexto de navegador en el momento de crearlo (ENT Tier3). En ambos casos la marca se elige al crear la instancia o el contexto, así que cambiarla implica crear una nueva.

Comprobar que una sola marca aparece en todas partes

Tras el inicio, puedes verificar el resultado en el propio navegador, sin herramientas adicionales. Abre las herramientas de desarrollo en cualquier página y recorre esta lista:

  1. La cadena User-Agent contiene el token de fabricante correcto (Edg/ para Edge, OPR/ para Opera).
  2. La cabecera de solicitud Sec-CH-UA enumera los tokens de marca esperados.
  3. navigator.userAgentData.brands coincide con la cabecera.
  4. fullVersionList muestra la versión propia de la marca junto a la de Chromium, y, en Chrome y Edge, ambas comparten el mismo número principal. La versión de marca de Opera sigue la numeración propia de Opera.
  5. No aparece ningún otro nombre de marca, salvo el token base de Chromium que incluyen todas las marcas basadas en Chromium.

Para los valores visibles desde scripts, pega tres líneas en la consola:

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

Para la cabecera, abre el panel de red, selecciona una solicitud HTTPS de nivel superior y lee las cabeceras de la solicitud. Las cabeceras detalladas, como Sec-CH-UA-Full-Version-List, solo aparecen cuando el sitio las pide con Accept-CH, de modo que su ausencia en una primera solicitud es normal y no indica una discrepancia. Si tus páginas inician workers, ejecuta las mismas líneas de consola en el contexto del worker para confirmar que informa de la misma marca que la página.

Una lista de comprobación superada demuestra que el navegador es coherente consigo mismo. No demuestra cómo tratará un sitio concreto la sesión, porque los sitios combinan muchos datos y cambian sus propias reglas con el tiempo. Usa la lista para confirmar tu configuración y mantén igual de coherente el resto de la identidad, como el perfil, la ruta de red y la configuración regional, en el renderizado, la pantalla, el idioma y los metadatos de solicitud.

Cuando algo parece incorrecto, el síntoma suele señalar la causa:

SíntomaCausa probableQué ajustar
La cadena UA dice Edg/ pero la lista de marcas solo nombra Google ChromeSolo se cambió la cadenaFijar la marca al iniciar en lugar de sustituir la cadena
La versión de Edge en fullVersionList parece la de ChromeNo se fijó la versión propia de la marcaAñadir --bot-brand-full-version
En Edge, la versión principal de Chromium difiere entre la cadena UA y la listaLas dos opciones de versión no comparten versión principalAlinear --bot-ua-full-version y --bot-brand-full-version con el perfil
La marca nunca cambiaLa opción se pasó como opción del frameworkPasarla dentro de args
La marca difiere de la que indica el perfilLas opciones de línea de comandos tienen prioridad sobre el perfilQuitar la opción o actualizar el perfil

Repite la comprobación tras cada cambio del perfil, de la versión de Chromium o de las opciones de marca, porque cualquiera de ellos puede mover una superficie sin mover las demás.

Una observación reproducible basada en el comportamiento público de Chromium

Este pequeño accesorio hace visible el límite sin afirmar que se haya ejecutado BotBrowser. La página registra navigator.userAgent, la matriz de marcas de baja entropía y fullVersionList; el servidor registra User-Agent y Sec-CH-UA, y después solicita la pista detallada con Accept-CH. En el modelo documentado de Chromium, la primera petición puede incluir la marca de baja entropía sin incluir Sec-CH-UA-Full-Version-List; una segunda petición puede incluir la lista detallada. Una sustitución que solo cambia la cadena no actualiza necesariamente los metadatos estructurados.

const observation = {
  ua: navigator.userAgent,
  brands: navigator.userAgentData?.brands ?? null,
  high: navigator.userAgentData ? await navigator.userAgentData.getHighEntropyValues(['fullVersionList']) : null,
};
console.table(observation);
Punto de observaciónResultado esperadoValor diagnóstico
Petición inicialUser-Agent y Sec-CH-UA de baja entropíaEncuentra una sustitución de UA antes de pedir pistas detalladas
Petición tras Accept-CHPuede aparecer Sec-CH-UA-Full-Version-ListDistingue la falta de activación de una versión discordante
Script de la páginabrands y fullVersionList coinciden con las cabecerasDetecta una regla de cabecera que no cambió JavaScript

Es una observación basada en la API NavigatorUAData de MDN y la especificación Client Hints, no una afirmación sobre un perfil concreto de BotBrowser. Se puede repetir con Chromium normal y ofrece una regla de parada: la misma marca y versión principal deben aparecer en las tres filas.

Conclusión práctica

Trata la marca como una parte de una identidad completa y no como un interruptor aislado:

  • Mantén las versiones alineadas. Usa --bot-brand-full-version para que la versión del fabricante corresponda a la versión principal de Chromium de tu perfil.
  • Parte de un perfil adecuado. Un perfil capturado de un navegador Edge real, combinado con --bot-browser-brand=edge, da el resultado más coherente.
  • Haz coincidir los ajustes del entorno. Marca, zona horaria, configuración regional, idioma y ruta de red deben describir el mismo tipo de usuario.
  • Conserva una marca durante toda la vida de una identidad. Cambiar la marca entre visitas al mismo sitio crea un historial incoherente.
  • Repite la lista de comprobación tras actualizar el navegador o el perfil.

No siempre hace falta la opción. Un perfil cargado ya trae una marca coherente, así que dejar sin definir --bot-browser-brand es la forma más sencilla de mantener la coherencia. Usa la opción cuando tengas un motivo para presentar otra marca, por ejemplo para reproducir un caso de soporte exclusivo de Edge o para dar a una segunda identidad su propia marca, y confirma entonces también las opciones de versión. Cada ajuste adicional es un valor más que debe mantenerse alineado con el resto, así que cambia solo lo que la tarea exige.

Algunas preguntas prácticas surgen con frecuencia:

  • ¿Cambiar la marca modifica las funciones del navegador? No. Actualiza valores de identidad, no la interfaz del navegador. Las funciones propias de cada marca, como los escudos de Brave o la barra lateral de Edge, no se emulan.
  • ¿Se puede usar cualquier marca con cualquier perfil? Para marcas que no sean WebView, se puede usar cualquier perfil compatible; la opción sustituye la marca de ese perfil y las opciones de línea de comandos tienen la prioridad más alta. WebView sigue sujeto a los ajustes de plataforma, modelo y móvil de Android mostrados arriba.
  • ¿Qué ocurre sin la opción? Se usa la marca almacenada en el perfil cargado, y Chrome es el valor predeterminado si el perfil no define ninguna.
  • ¿La marca afecta a las extensiones? La documentación no describe ningún efecto en las extensiones, así que prueba las que uses después de cambiar la marca.
  • ¿Puede cambiar la marca mientras el navegador está en ejecución? No. Se fija al iniciar o al crear un contexto, así que para otra marca hay que usar una instancia nueva.
  • ¿WebView es distinto? Sí. Además necesita los ajustes de plataforma, modelo y móvil mostrados arriba.

Con BotBrowser puedes cambiar la marca del navegador al iniciar con --bot-browser-brand (chrome, edge, brave, opera, chromium o webview) y fijar una versión específica de la marca con --bot-brand-full-version, de modo que el User-Agent, las marcas de navigator.userAgentData y los encabezados Client Hints cambien juntos en lugar de desalinearse. BotBrowser no emula la interfaz ni las funciones propias de cada marca. No puede cambiar la marca de una instancia o un contexto en ejecución, ya que la marca se fija al crear la instancia o el contexto, y no puede garantizar cómo tratará un sitio la identidad resultante.

Para los detalles sobre User-Agent y Client Hints, aplica las comprobaciones de este artículo y mantén alineada la configuración geográfica con la marca elegida.

Fuentes

#marca del navegador#Chrome#Edge#Brave#Identity

Este artículo forma parte de la guía: Superficies de identidad del navegador: panorama de coherencia

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.