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
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-brandal iniciar, alinea las versiones de Chromium y de la marca y verifica User-Agent, Client Hints ynavigator.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
- Las superficies que transportan una identidad de marca
- Por qué no basta con sustituir el User-Agent
- Fijar la marca al iniciar con BotBrowser
- Comprobar que una sola marca aparece en todas partes
- Conclusión práctica
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.
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-UAsigue enumerando los tokens de la marca original.navigator.userAgentData.brandssigue devolviendo la lista original.Sec-CH-UA-Full-Version-Listsigue 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.
| Superficie | Sigue la marca elegida |
|---|---|
Cabecera User-Agent | Sí |
navigator.userAgent | Sí |
Cabecera Sec-CH-UA | Sí |
Sec-CH-UA-Full-Version-List | Sí |
navigator.userAgentData.brands | Sí |
getHighEntropyValues() | Sí |
| Entrada GREASE | Sí |
Valores de marca admitidos
| Marca | Valor de la opción | Notas |
|---|---|---|
| Chrome | chrome | Identidad predeterminada basada en Chromium |
| Edge | edge | Microsoft Edge con el token Edg/ |
| Brave | brave | Identidad del navegador Brave |
| Opera | opera | Opera con el token OPR/ |
| Chromium | chromium | Identidad Chromium simple sin marca de fabricante |
| WebView | webview | Android 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-versionfija la versión completa propia de la marca, por ejemplo142.0.3595.65para Edge.--bot-ua-full-versionfija la versión completa de Chromium, por ejemplo142.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:
- La cadena
User-Agentcontiene el token de fabricante correcto (Edg/para Edge,OPR/para Opera). - La cabecera de solicitud
Sec-CH-UAenumera los tokens de marca esperados. navigator.userAgentData.brandscoincide con la cabecera.fullVersionListmuestra 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.- 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íntoma | Causa probable | Qué ajustar |
|---|---|---|
La cadena UA dice Edg/ pero la lista de marcas solo nombra Google Chrome | Solo se cambió la cadena | Fijar la marca al iniciar en lugar de sustituir la cadena |
La versión de Edge en fullVersionList parece la de Chrome | No se fijó la versión propia de la marca | Añadir --bot-brand-full-version |
| En Edge, la versión principal de Chromium difiere entre la cadena UA y la lista | Las dos opciones de versión no comparten versión principal | Alinear --bot-ua-full-version y --bot-brand-full-version con el perfil |
| La marca nunca cambia | La opción se pasó como opción del framework | Pasarla dentro de args |
| La marca difiere de la que indica el perfil | Las opciones de línea de comandos tienen prioridad sobre el perfil | Quitar 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ón | Resultado esperado | Valor diagnóstico |
|---|---|---|
| Petición inicial | User-Agent y Sec-CH-UA de baja entropía | Encuentra una sustitución de UA antes de pedir pistas detalladas |
Petición tras Accept-CH | Puede aparecer Sec-CH-UA-Full-Version-List | Distingue la falta de activación de una versión discordante |
| Script de la página | brands y fullVersionList coinciden con las cabeceras | Detecta 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-versionpara 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
Este artículo forma parte de la guía: Superficies de identidad del navegador: panorama de coherencia
Artículos Relacionados
User-Agent y Client Hints: una identidad coherente
Huella digitalClient Hints Fingerprinting: encabezados HTTP e identidad
IdentidadSuperficies de identidad del navegador: panorama de coherencia
PlataformaEjecutar perfiles de navegador Windows en macOS y Linux
PlataformaMigración de User-Agent Reduction a Client Hints
Huella digitalFingerprinting del Navigator: fugas del navegador
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.