Generador de User-Agent: cadenas actuales que no están obsoletas
Se ejecuta en tu navegador: nada de lo que introduzcas aquí se nos envía.
Una cadena que dice una versión de navegador retirada hace tres versiones es una señal, no un disfraz. Estas se construyen a partir de la versión de tu propio navegador siempre que podemos leerla, así se mantienen al día sin que nadie tenga que mantener una lista.
Versiones tomadas de tu propio navegador (), así que están actualizados por definición. No podemos leer la versión de esta familia desde tu navegador, así que esta usa nuestra propia tabla, revisada a mano por última vez en . Consulta la versión actual antes de usarla en algo que importe.
La plantilla de escritorio es una cadena exacta: los navegadores reales de la misma versión y plataforma envían lo mismo, y variarla haría que el tuyo fuera el raro. Las plantillas móviles varían la versión del sistema y el modelo, algo que los dispositivos reales sí hacen.
Se genera en tu navegador a partir de las plantillas de la página. No se solicita ni se envía nada: el generador funciona incluso sin conexión.
Por qué un user-agent generado suele ser la solución equivocada
Merece la pena decirlo antes de la herramienta y no después. Sustituir tu cadena de user-agent es lo primero que se prueba cuando un scraper empieza a recibir bloqueos, y por sí solo rara vez ayuda, porque la cadena es lo más barato que lee un sitio y casi nunca es lo único.
Una petición llega con un user-agent, un conjunto de cabeceras en un orden concreto, parámetros de handshake TLS propios de la biblioteca cliente y, si se ejecuta JavaScript, varias docenas de valores del navegador. Decir que eres Chrome en Windows mientras tu biblioteca HTTP envía su propio orden de cabeceras y su propia huella TLS produce una petición que no coincide con ningún navegador real, lo que es una señal mejor para un bloqueador que la que habría dado un python-requests/2.31.0 sencillo y honesto.
Donde sí importa un user-agent actual y correcto es en el caso contrario: estás ejecutando un navegador real, todo lo demás de la petición es genuino y la cadena es el único valor obsoleto. Pasa más de lo que cabría esperar, porque las cadenas se pegan en una configuración una vez y luego siguen funcionando durante dos años.
Cómo se mantiene al día este generador
Esta es la parte en la que fallan la mayoría de los generadores. Una tabla fija de versiones es exacta la semana en que se publica y está mal sin que se note un mes después, y una cadena que dice ser una versión de Chrome retirada tres versiones atrás es una señal de alarma, no un disfraz. Chrome publica una versión principal aproximadamente cada cuatro semanas.
Por eso, aquí los números de versión se leen de tu propio navegador siempre que podamos leerlos. Si usas Chrome, las plantillas de Chrome usan la versión que realmente tienes en ejecución, que es actual por definición y no necesita mantenimiento por nuestra parte. Lo mismo vale para Firefox, Edge y Safari. Solo cuando no podemos leer una familia de tu navegador —por ejemplo, pedir cadenas de Firefox mientras navegas con Chrome— la página recurre a una tabla que mantenemos a mano, y lo dice claramente, con la fecha de la última comprobación, en lugar de fingir que está al día.
Por qué no varían las plantillas de escritorio
Puede que observes que pedir diez cadenas de Chrome en Windows te devuelve una. Es deliberado, y es lo contrario de lo que hacen la mayoría de los generadores. Todo Chrome real en Windows de 64 bits de una versión concreta envía un user-agent idéntico byte a byte; la cadena no incluye ningún detalle específico de la máquina. Un generador que variara la versión menor o barajara los tokens produciría diez cadenas que ningún navegador ha enviado nunca, y cada una de ellas sería, por separado, más sospechosa que la real.
Las plantillas móviles sí varían, porque los dispositivos reales también: la versión de Android y la cadena del modelo cambian de verdad de un terminal a otro, y un grupo de agentes Android todos idénticos resulta tan raro como un grupo de agentes de escritorio todos distintos.
Dónde aparece la cadena y dónde no
«Cambiar tu user-agent» significa cosas distintas en lugares distintos, y esos lugares no siempre coinciden entre sí, lo que es en sí mismo una de las formas en que se detecta una discrepancia.
- La cabecera User-Agent. Se envía en cada petición, también en las de imágenes y hojas de estilo. Es la que configura una biblioteca HTTP y la única que ve un servidor si no se ejecuta JavaScript.
- navigator.userAgent. La leen los scripts de la página. Una extensión que cambia la cabecera pero no esta propiedad crea una contradicción que descubre una sola línea de JavaScript, y hay bastantes extensiones que hacen justamente eso.
- Client Hints. Un conjunto de cabeceras aparte (Sec-CH-UA y similares) que los navegadores Chromium actuales envían junto a la cadena. Llevan la marca, la versión y la plataforma en forma estructurada, y son adonde Chrome ha ido trasladando el detalle que retiró de la cadena. Suplantar la cadena mientras Client Hints dice la verdad es una incoherencia frecuente y fácil de detectar.
- En el caso de TLS, en ningún sitio. El handshake se produce antes de que se envíe ninguna cabecera, y sus parámetros identifican la biblioteca cliente al margen de lo que configures. Por eso una petición de Python que dice ser Chrome se detecta antes incluso de que se lea el user-agent.
En resumen: configurar la cadena en un sitio y no en los demás da un cliente que no coincide con nada real. Si usas un navegador, cámbiala con algo que cambie todas; si usas una biblioteca, acepta que la cadena es lo de menos.
Cómo usarlas sin empeorar las cosas
- Que la plataforma cuadre con todo lo demás. Una cadena de macOS en una máquina con un juego de fuentes de Windows y client hints de Windows es una contradicción, y el lector de huellas te mostrará qué valores la delatan.
- No envíes una cadena móvil desde una conexión de escritorio. Un agente de iPhone con una pantalla de 2560×1440, sin soporte táctil y con una dirección de centro de datos es lo bastante concreto como para parecer deliberado.
- Rota entre dispositivos, no entre versiones. Si necesitas que un pool parezca variado, varía la plataforma y el dispositivo. Tres versiones de Chrome sobre el mismo hardware no son variedad: es un navegador a medio actualizar.
- Vuelve a generarlas cada cierto tiempo. Lo que pegues hoy en una configuración caduca en el mismo ciclo de cuatro semanas que lo de todos los demás. Si coges aquí las cadenas de tu propio navegador, volver tras unas cuantas actualizaciones te da las actuales.
- Arregla primero el resto de la petición. Si haces scraping con una biblioteca HTTP en lugar de con un navegador, el orden de las cabeceras y la huella TLS importan más que la cadena. Usa un cliente que imite un navegador a ese nivel o ejecuta un navegador real.
Para comprobar qué afirma en realidad una cadena que ya tienes —incluido si su versión es una que alguien sigue usando—, pégala en el analizador de user-agent.
Preguntas que recibimos sobre Generador de user-agent
¿Por qué, si pido diez cadenas de escritorio, me devuelve una?
Porque todos los Chrome reales de una versión concreta en Windows de 64 bits envían exactamente la misma cadena: no lleva ningún detalle propio de la máquina. Diez cadenas variadas serían diez cadenas que ningún navegador ha enviado, cada una más sospechosa que la real. Las plantillas móviles sí varían, porque los dispositivos reales difieren de verdad.
¿Están al día estos números de versión?
Donde podemos leer la versión de tu propio navegador, sí, por definición: las plantillas de Chrome usan el Chrome que estás ejecutando. Para una familia que no podemos leer de tu navegador, la página recurre a una tabla que mantenemos a mano y te dice cuándo se comprobó por última vez.
¿Dejaré de estar bloqueado si cambio mi user-agent?
Por sí solo, normalmente no. La cadena es lo más barato que lee un sitio y casi nunca lo único: también se comprueban el orden de las cabeceras, la huella TLS y varias docenas de valores del navegador. Una cadena de Chrome enviada desde una librería HTTP de Python no coincide con ningún navegador real y es una señal más clara que una honesta.
¿Se envía algo cuando genero?
No. Las plantillas están en la página y las cadenas se construyen en tu navegador. El generador funciona con la conexión desenchufada.
¿Puedo usarlas en un scraper?
Puedes, y serán cadenas correctas. Que eso ayude depende del resto de la petición: si usas una librería HTTP en lugar de un navegador, corrige primero el orden de las cabeceras y la huella TLS, porque se comprueban más a menudo que la cadena.
¿Debe usar cada petición de un pool un user-agent distinto?
Varía la plataforma y el dispositivo en lugar de la versión. Varias versiones del mismo navegador sobre un hardware idéntico parecen un navegador a medio actualizar, no varias personas. Y doscientas peticiones que comparten una cadena idéntica byte a byte son el patrón más fácil de bloquear que hay.