Parches Rebrowser: cuando el proxy ya funciona
Compara los parches Rebrowser, Playwright original y un perfil declarado en una página propia. Distingue biblioteca, renderizado y rutas del proxy.
BotBrowser Team
Quieres la documentación estructurada de Huella digital?
Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.
Una conexión proxy de Rebrowser que funciona no determina la salida del canvas, las fuentes ni el procesamiento de audio del navegador. Primero identifica si la aplicación utiliza los parches de código abierto de las bibliotecas Rebrowser, un servicio de navegador alojado o ambos. Son configuraciones distintas. BotBrowser proporciona controles de perfil declarados para los gráficos, las fuentes y el audio que expone el navegador, pero no puede garantizar la decisión de un destino ni hacer que cambiar de proxy defina un entorno de navegador completo.
Resumen
- Los parches Rebrowser fijados a una revisión modifican el código de las bibliotecas de automatización, incluida la gestión de los contextos de ejecución y los argumentos de inicio. No sustituyen el ejecutable de Chrome.
- CDP puede ejecutar scripts e instalar scripts antes de que se ejecute un documento. Que una API quede fuera del alcance de un parche concreto no significa que sea inaccesible mediante CDP.
- En una página de prueba propia en Ubuntu, Playwright original y la biblioteca parcheada devolvieron las mismas cuatro observaciones de renderizado en tres inicios independientes de cada configuración. La configuración con perfil declarado cambió tres observaciones; el resultado de audio permaneció igual.
- La configuración de perfil utilizó una versión de parche del navegador diferente y un destino Windows sobre Ubuntu. Sus diferencias son observaciones de esa configuración, no una medición aislada de una capa de implementación.
Contenido
- Distinguir un paquete Rebrowser de un proxy y un navegador en la nube
- Leer el parche real antes de delimitar su alcance
- Comparar tres configuraciones en una página propia
- Interpretar canvas, WebGL, fuentes y audio por separado
- Reproducir la observación sin poner a prueba a un tercero
- Elegir la siguiente comprobación según la operación fallida
- Conclusión práctica
Distinguir un paquete Rebrowser de un proxy y un navegador en la nube
La expresión rebrowser proxy puede ocultar tres preguntas independientes: qué paquete de automatización se ejecuta, dónde se ejecuta su navegador y qué ruta transporta la petición. Registra cada una de forma explícita. Instalar un paquete no demuestra que se haya utilizado un proxy. Conectarse a un navegador remoto no demuestra que su sistema de archivos, perfil o ejecutable coincida con una instalación local. Que cambie la dirección pública de salida no demuestra que haya cambiado una entrada del renderizado.
| Configuración | Qué identifica | Qué sigue necesitando pruebas por separado |
|---|---|---|
| Paquete Playwright original | La biblioteca de automatización y su versión | Ejecutable del navegador, argumentos de inicio y ruta de red |
| Paquete de sustitución directa Rebrowser | Una biblioteca con los parches del proyecto aplicados | Paquete que se ha cargado realmente, Chrome subyacente y ajustes de parches elegidos |
| Conexión proxy | Una ruta para el tráfico que se le asigna | Ajustes del navegador, estado almacenado e interpretación del destino |
| Sesión de navegador alojada | Un servicio de navegador operado de forma remota | Configuración específica del servicio, persistencia y comportamiento de red |
| Perfil de navegador declarado | Entradas aplicadas a un entorno de navegador compatible | Carga correcta, salida real y compatibilidad con la aplicación |
El README oficial de la revisión fijada describe los paquetes de sustitución directa como las bibliotecas originales con parches aplicados y describe por separado la oferta en la nube del proveedor. Por tanto, un experimento con un paquete local no puede sustentar una afirmación sobre las identidades de navegador, la oferta de proxies, los precios o las tasas de éxito de ese producto en la nube. Ninguna sesión de Rebrowser en la nube formó parte de la comparación siguiente.
Si la petición sigue una ruta incorrecta, empieza por las pruebas de red. Un observador bajo tu control debe determinar la dirección de salida, mientras que un marcador en el origen permite identificar qué petición llegó. Los valores gráficos del navegador no indican si un túnel se autenticó. El diagnóstico de rutas conservando el contexto aborda los cambios en el enrutamiento del tráfico; el flujo de trabajo del lanzador aborda el inicio y la gestión de sesiones de navegador configuradas. Ni las pruebas de ruta ni un inicio correcto con el lanzador sustituyen la comprobación del paquete que una aplicación ha cargado realmente.
No incluyas las credenciales de un proxy en el registro de la comparación. Los nombres y versiones de los paquetes, los hashes de los navegadores, una etiqueta de ruta y la respuesta de un observador propio suelen bastar para distinguir estas preguntas. Si no hay un observador autorizado disponible, marca la ruta como no verificada. Una página que se renderiza correctamente no identifica la ruta que la suministró, y una petición rechazada no identifica qué propiedad del navegador tuvo en cuenta el destino.
Leer el parche real antes de delimitar su alcance
El código fuente inspeccionado corresponde al commit 31b51356499600f71126aae532f3d57abdc92272 de Rebrowser patches, incluido su parche para Playwright 1.64.1. Los paquetes ejecutados fueron [email protected] y [email protected]. La versión de un paquete y la versión de destino de un parche del proyecto original son identificadores distintos; conserva ambos en lugar de asumir que sus últimos componentes numéricos deben coincidir.
El parche de código fuente fijado cambia la preparación de los contextos de ejecución, los nombres del mundo de utilidades y otros comportamientos de la biblioteca. Sus cambios en los argumentos de inicio incluyen el ajuste de Blink relativo al control por automatización y cambios en varios parámetros predeterminados. Esto es más preciso que describir el proyecto como una colección de sustituciones de propiedades de página. Algunos cambios afectan a cómo la biblioteca se comunica con Chrome y otros a las opciones que se le pasan al iniciarse.
Estos detalles también explican por qué un resultado de canvas sin cambios no demuestra que el parche haya fallado. Un cambio en la gestión de contextos tiene un propósito diferente al de cambiar los píxeles del canvas. El motor de renderizado puede producir bytes idénticos mientras la biblioteca de automatización sigue una secuencia de preparación distinta. A la inversa, obtener una cadena diferente de una API no demuestra que el resto del entorno del navegador sea coherente.
El límite general del protocolo requiere el mismo cuidado. CDP documenta Runtime.evaluate y Page.addScriptToEvaluateOnNewDocument. Un cliente del protocolo puede ejecutar scripts de página, incluidos scripts que afectan al comportamiento visible desde JavaScript. Por tanto, «estos parches fijados no configuran esta salida de renderizado» es una afirmación sobre una implementación. «CDP no puede afectar a los valores de las API de renderizado» sería una afirmación mucho más amplia, y las funciones documentadas de ejecución de scripts no la respaldan.
El mundo de ejecución es otra entrada del experimento. Un script evaluado en un mundo aislado no comparte todos los enlaces de JavaScript con el mundo principal del documento. Una comparación que cambia tanto la biblioteca como el mundo utilizado para leer un valor puede atribuir la diferencia a una entrada equivocada. En esta página de prueba, el propio script del documento realiza las observaciones y las envía a su mismo origen. El controlador navega y espera la entrega; no recopila los valores evaluando la función de observación en un mundo elegido por la biblioteca.
No deduzcas el resultado de un destino a partir de esta inspección del código. El código fuente establece qué cambia una revisión concreta. No establece todas las consecuencias en todas las versiones de Chrome, el comportamiento de otro paquete instalado con un nombre parecido ni el proceso de decisión de un sitio web. Las afirmaciones de Rebrowser sobre sitios de terceros no se probaron aquí de forma independiente y no se utilizan como resultado.
Comparar tres configuraciones en una página propia
La ejecución controlada utilizó Ubuntu, navegadores con interfaz gráfica en la misma pantalla, un área visible solicitada de 1280 × 900 y directorios de datos nuevos e independientes. Cada configuración se ejecutó tres veces, con nueve tareas en un único grupo global. El límite solicitado del grupo fue 20, acotado por las nueve tareas disponibles. El muestreo de procesos observó nueve líneas de ejecución de navegador activas simultáneamente, y el supervisor verificó que no quedaran procesos residuales de la ejecución. Las páginas original y parcheada informaron 1280 × 900; la configuración declarada informó 1288 × 944, por lo que el tamaño observado no se mantuvo constante entre las tres configuraciones.
| Grupo | Paquete de automatización | Versión real del ejecutable | Perfil |
|---|---|---|---|
| Original | [email protected] | Chrome estándar 157.0.8103.50 | Sin perfil de producto declarado |
| Parcheado | [email protected] | El mismo Chrome estándar 157.0.8103.50 | Sin perfil de producto declarado |
| Declarado | [email protected] | BotBrowser 157.0.8103.38 | Destino Chromium 157 Windows x64 sobre Ubuntu |
La comparación entre el original y el parcheado mantiene constante el ejecutable estándar. El tercer grupo cambia a la vez el ejecutable y la configuración de destino. Los tres comparten la versión principal del navegador, pero sus versiones completas no son idénticas. Una diferencia en esa tercera columna no permite identificar por sí sola el efecto de un perfil, la versión de parche del ejecutable o una capa de implementación. Es un registro útil de configuraciones con límites explícitos, no una afirmación controlada de que una capa sea superior.
La tabla siguiente utiliza prefijos de los valores SHA-256 completos únicamente para facilitar la lectura. Los valores completos, los algoritmos, las observaciones repetidas y los registros del entorno se conservan en la salida del programa de prueba ejecutable. Un prefijo es una etiqueta de esta ejecución, no una puntuación de identidad.
Las observaciones registradas, el script de comparación local y el código fuente de la página propia están disponibles para su inspección. Guarda el script con extensión .mjs y la página a su lado como render-fixture.html. El script público reproduce las observaciones de página; no realiza la auditoría separada de carga del perfil utilizada para aceptar la ejecución controlada.
| Observación | Original | Parcheado | Perfil declarado |
|---|---|---|---|
| Prefijo SHA-256 del RGBA del canvas | 26cd080f5b96 | 26cd080f5b96 | 0119c1c2e040 |
| Renderer de WebGL, abreviado | ANGLE, Vulkan, SwiftShader | ANGLE, Vulkan, SwiftShader | ANGLE, NVIDIA Quadro P1000, Direct3D11 |
| Coincidencias de fuentes candidatas | Arial; Times New Roman; Courier New; DejaVu Sans; Liberation Sans | Los mismos cinco candidatos | Arial; Times New Roman; Courier New |
| Prefijo SHA-256 de las muestras de audio sin conexión | 0d6f33df90bb | 0d6f33df90bb | 0d6f33df90bb |
| Suma de los valores absolutos de las últimas 500 muestras de audio | 124.04347776696522 | 124.04347776696522 | 124.04347776696522 |
Estas observaciones se repitieron dentro de cada grupo en los tres inicios nuevos. En particular, las muestras de audio no cambiaron en el grupo con perfil declarado para esta entrada. Una comparación debe conservar esa igualdad en lugar de simplificarla en una afirmación de que la configuración del perfil cambia todas las superficies de huella digital.
El supervisor de la ejecución aceptada informó:
"comparisonPermitted": true,
"peakActive": 9,
Ese permiso significa que se cumplieron los requisitos previos locales del experimento. Los intentos iniciales carecían de las pruebas de carga del perfil exigidas en el registro y no se aceptaron como resultados de tres grupos. La ejecución final conservó pruebas de descifrado y carga correctos del archivo cifrado exacto, junto con la identidad Windows declarada del mismo contexto de página. Un nombre de archivo, un proceso iniciado o una sesión CDP conectada no se consideraron por sí solos prueba de carga.
No se contactó con ningún sitio web externo para obtener el veredicto de un detector. La página de prueba no utilizó proxies, por lo que no puede medir el rendimiento de los proxies Rebrowser ni comparar proveedores de proxies. Su resultado responde a la pregunta más limitada de si estas cuatro observaciones de página cambiaron con las configuraciones locales registradas.
Interpretar canvas, WebGL, fuentes y audio por separado
La comparación de canvas utilizó un canvas fijo de 300 × 80 con formas, colores y texto fijos. SHA-256 se calculó sobre los 96000 bytes devueltos por getImageData, antes de codificar la imagen. Comparar en su lugar un archivo PNG o una URL de datos introduciría una entrada de serialización diferente. Conserva el texto, la fuente solicitada, las dimensiones y el orden de dibujo al repetir la medición. Un hash diferente permite localizar una salida que cambió; no explica si la causa fueron las fuentes, la rasterización, las opciones del navegador u otra entrada.
La comparación de WebGL registró el renderer expuesto mediante WEBGL_debug_renderer_info cuando estaba disponible. El renderer indicado describe un valor expuesto, no un inventario verificado del hardware físico. La configuración con destino Windows indicó un renderer Direct3D mientras se ejecutaba en Ubuntu, por lo que presentar esa cadena como la GPU instalada en el equipo anfitrión sería engañoso. Si la extensión o el contexto no están disponibles, el registro correcto es «no disponible», no una cadena de renderer vacía que se compare silenciosamente como una coincidencia.
El experimento de fuentes se limitó deliberadamente a un pequeño conjunto de candidatas. Las candidatas fueron Arial, Times New Roman, Courier New, DejaVu Sans, Liberation Sans y Noto Sans. Para cada una, la página de prueba comparó la anchura de un texto fijo con las alternativas genéricas serif, sans-serif y monospace. Una coincidencia significa que la candidata alteró la anchura medida con ese método. No demuestra que exista el archivo de fuente exacto, no enumera todas las fuentes instaladas ni distingue todos los alias y sustitutos. La salida completa conserva las anchuras y la lista de coincidencias para que una etiqueta simplificada no oculte la observación subyacente.
El audio sin conexión utilizó un canal, 5000 tramas a 44100 Hz, un oscilador triangular y una configuración fija del compresor. La salida registra un resumen criptográfico de los bytes de las muestras Float32 y la suma de los valores absolutos de las últimas 500 muestras. Es un cálculo sin conexión, no una grabación de un micrófono, una tarjeta de sonido o un altavoz. Que las muestras sean iguales establece la igualdad para ese grafo y esa entrada. No establece que todas las API de audio, dispositivos o grafos de procesamiento se comporten de forma idéntica.
La coincidencia dentro de un grupo también es más limitada que la estabilidad a largo plazo. Tres inicios nuevos en un equipo no establecen que un valor se mantenga tras actualizaciones del sistema operativo, cambios de fuentes, cambios del controlador de GPU u otra compilación del navegador. Del mismo modo, una sola observación distinta no revela cómo combina las señales un sistema remoto. Los controles documentados de las superficies del navegador identifican las áreas configurables del producto; la tabla solo establece el comportamiento realmente observado para esta configuración seleccionada.
Reproducir la observación sin poner a prueba a un tercero
Utiliza una página bajo tu control y mantén idéntico su script de recopilación en todos los grupos. Fija las versiones de ambos paquetes de automatización y proporciona rutas explícitas a los ejecutables. Playwright documenta que una ruta a un ejecutable alternativo conlleva riesgos de compatibilidad, por lo que un funcionamiento correcto con las versiones de Chrome probadas no debe generalizarse como una promesa para cualquier versión futura. Registra un fallo de inicio como un fallo de preparación antes de hacer comparaciones.
Una pequeña reproducción local puede servir una página y guardar un resultado enviado sin pedir a un comprobador de terceros que lo interprete. Con Node.js, la parte de entrega puede ser:
import http from 'node:http';
import { readFile, writeFile } from 'node:fs/promises';
const page = await readFile('./render-fixture.html');
const server = http.createServer(async (request, response) => {
if (request.method === 'GET' && request.url === '/') {
response.writeHead(200, { 'Content-Type': 'text/html' });
response.end(page);
return;
}
if (request.method === 'POST' && request.url === '/results') {
const chunks = [];
let size = 0;
for await (const chunk of request) {
size += chunk.length;
if (size > 131072) {
response.writeHead(413).end();
return;
}
chunks.push(chunk);
}
const record = JSON.parse(Buffer.concat(chunks).toString('utf8'));
await writeFile('./observation.json', JSON.stringify(record, null, 2));
response.writeHead(200).end('recorded');
return;
}
response.writeHead(404).end();
});
server.listen(0, '127.0.0.1');
Este ejemplo de entrega no es un supervisor de navegador completo: utiliza un archivo de resultados por tarea, fija un plazo total y cierra tu propio servidor y los contextos del navegador tras la entrega. El programa de comparación completo separa esas tareas y registra la limpieza de procesos. Una espera fija no es su condición de finalización. Espera el POST con los resultados de la página propia, y una observación ausente o inválida sigue siendo una tarea fallida.
Utiliza directorios de datos nuevos e independientes para una comparación centrada únicamente en el renderizado. Compartir un directorio de navegador con permisos de escritura entre procesos simultáneos introduce bloqueos e interferencias de estado. Si la pregunta que se pretende responder es la continuidad de la sesión, utiliza un contrato de prueba separado que parta de instantáneas controladas tomadas con el navegador cerrado; no añadas silenciosamente cambios de estado almacenado a una comparación de renderizado. Del mismo modo, mantén constantes el modo de inicio y el área visible, en lugar de cambiar entre modo con interfaz y sin interfaz al mismo tiempo que la biblioteca.
Conserva las salidas no compatibles. Una fuente candidata ausente en ambos grupos con Chrome estándar, una extensión gráfica no disponible o un resultado de audio sin cambios pueden ser más útiles que una tabla ordenada en la que todo difiere. Estos registros explican qué parte de una suposición falló. No es necesario convertirlos en una recomendación de producto. Para una explicación más amplia de las responsabilidades de la biblioteca y el navegador, la comparación general del alcance de los parches aporta esa distinción; este experimento ligado a versiones concretas aporta la observación específica.
Elegir la siguiente comprobación según la operación fallida
Si una aplicación sigue comportándose de forma inesperada después de instalar Rebrowser, conserva la primera operación fallida. La siguiente acción útil depende de si el fallo ocurrió al importar el paquete, iniciar Chrome, navegar mediante un proxy, ejecutar el código de la aplicación o recibir la respuesta del destino. Cambiar los ajustes del navegador antes de identificar esa capa dificulta saber qué cambio tuvo efecto.
| Síntoma | Primera prueba | Siguiente acción controlada |
|---|---|---|
| El parche parece no tener efecto | Nombre, versión y ubicación resuelta del paquete cargado | Confirmar que la aplicación importa el núcleo parcheado y no otra copia instalada |
| Un navegador no se inicia | Versión del ejecutable, error de inicio y biblioteca seleccionada | Comprobar la compatibilidad con una página conocida bajo tu control |
| Las peticiones siguen una ruta inesperada | Resultado del observador propio y configuración de ruta | Corregir el enrutamiento por separado de los ajustes gráficos |
| Un valor de renderizado no cambia | La misma entrada de página, ejecutable y método de observación | Leer si ese parche fijado realmente cambia esa entrada |
| El código de la aplicación difiere entre mundos | Elección del contexto y acceso a los enlaces del documento | Comprobar los requisitos del mundo de ejecución antes de cambiar valores |
| Un destino rechaza una acción | Respuesta real y política documentada del operador | Detenerse en el límite del diagnóstico autorizado; no deducir una regla de puntuación oculta |
Para las importaciones, comprobar solo package.json no basta cuando un espacio de trabajo contiene varios árboles de dependencias o alias. Registra la versión resuelta desde la ubicación de la aplicación que se está ejecutando. El README fijado de Rebrowser documenta un problema histórico de dependencias entre el paquete de sustitución directa y el núcleo; es un motivo para verificar el paquete real, no una afirmación de que todas las instalaciones lo sufran. Reinstalar un paquete de nivel superior no relacionado no demuestra qué núcleo cargó la aplicación.
Para los requisitos de renderizado, define la salida necesaria antes de elegir un control. Una carga de trabajo que solo necesita que una página se renderice correctamente tiene una comprobación de aceptación distinta de otra que debe conservar ajustes gráficos declarados entre sesiones. La referencia de coherencia de automatización de BotBrowser documenta el comportamiento del producto en ese límite, pero ni un perfil configurado ni un parche de biblioteca pueden certificar la clasificación de identidad que hace un destino.
Preguntas frecuentes
¿Rebrowser sustituye a Chrome?
Las bibliotecas de sustitución directa de código abierto inspeccionadas aquí parchean el código de las bibliotecas de automatización y utilizan un navegador suministrado o instalado por separado. Un servicio alojado corresponde a otro ámbito de producto.
¿Puede un cliente CDP afectar a los valores del canvas?
CDP puede ejecutar scripts de página. La afirmación respaldada se refiere a lo que modifica realmente una implementación concreta, no a una incapacidad absoluta del protocolo para influir en un resultado visible desde JavaScript.
¿Que los valores coincidan significa que el parche no hizo nada?
No. Esta página de prueba mide cuatro observaciones de renderizado. Los cambios de la biblioteca en la preparación de contextos o en los argumentos de inicio pueden ser relevantes sin cambiar esas cuatro salidas.
¿Un proxy proporciona al navegador un perfil diferente?
Una configuración de proxy selecciona el enrutamiento del tráfico dentro de su alcance. No define por sí sola las fuentes, una entrada del canvas ni un grafo de audio sin conexión.
Fuentes
- README de Rebrowser patches en el commit inspeccionado
- Parche de código fuente de Rebrowser para Playwright 1.64.1
- CDP Runtime.evaluate
- CDP Page.addScriptToEvaluateOnNewDocument
- Nota de compatibilidad de executablePath de Playwright
- Descripción de las superficies del navegador de BotBrowser
- Coherencia de automatización de BotBrowser
Conclusión práctica
Empieza por el paquete, el ejecutable y la operación exactos que fallaron. En este experimento fijo, el parche de biblioteca de Rebrowser dejó cuatro observaciones de renderizado iguales a las de Playwright original, mientras que la configuración con perfil declarado cambió las observaciones de canvas, renderer y fuentes candidatas, pero mantuvo igual el audio. Estos resultados responden a una pregunta sobre configuraciones locales. No clasifican productos, no caracterizan un servicio en la nube ni predicen la decisión de un destino. Mantén el enrutamiento, el comportamiento de la biblioteca de automatización y los ajustes declarados del navegador como entradas que se puedan verificar por separado.
Este artículo forma parte de la guía: ¿Qué es la huella digital del navegador?
Artículos Relacionados
Parches JS de navegador: qué cambian y qué no
Primeros pasosProxy launcher de BotBrowser: perfiles, proxy e inicio
Huella digitalHuella de Canvas: cómo funciona y qué ayuda
Huella digitalCómo leer las señales de huella del navegador
Huella digitalHuella de audio explicada: cómo AudioContext te rastrea
Primeros pasosProxy Playwright: rutas, autenticación y señales
Ejecuta la misma comprobación en BotBrowser
Carga un perfil, mantén dentro del navegador las señales que acabas de leer y confirma el resultado en tu propia máquina antes del despliegue.