
Versión indetectada de la biblioteca de pruebas y automatización Playwright.
<h1 align="center">
🎭 Patchright
</h1>
<p align="center">
<a href="https://github.com/Kaliiiiiiiiii-Vinyzu/patchright/blob/main/LICENSE">
<img src="https://img.shields.io/badge/License-Apache%202.0-green">
</a>
<a>
<img src="https://img.shields.io/badge/Based%20on-Playwright-goldenrod">
</a>
<a>
<img src="https://img.shields.io/badge/Driver-Patched-blue">
</a>
<a href="https://github.com/Kaliiiiiiiiii-Vinyzu/patchright/releases/latest">
<img alt="Patchright Version" src="https://img.shields.io/github/v/release/Kaliiiiiiiiii-Vinyzu/patchright?display_name=release&label=Version">
</a>
<br/>
<a href="https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python">
<img src="https://img.shields.io/badge/Package-Python-seagreen">
</a>
<a href="https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python/releases">
<img alt="Python Downloads" src="https://img.shields.io/pepy/dt/patchright?color=red&label=Python%20Downloads">
</a>
<a href="https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-nodejs">
<img src="https://img.shields.io/badge/Package-NodeJS-seagreen">
</a>
<a href="https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-nodejs/releases">
<img alt="NodeJS Downloads" src="https://img.shields.io/npm/d18m/patchright?color=red&label=NodeJS%20Downloads">
</a>
<a href="https://github.com/DevEnterpriseSoftware/patchright-dotnet">
<img src="https://img.shields.io/badge/Package-.Net-seagreen">
</a>
<a href="https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-nodejs/releases">
<img alt=".Net Downloads" src="https://img.shields.io/nuget/dt/Patchright?label=.Net%20Downloads">
</a>
<br/>
<img src="https://img.shields.io/github/actions/workflow/status/Kaliiiiiiiiii-Vinyzu/patchright/patchright_tests.yml?label=Patchright%20Driver%20Tests">
<img src="https://img.shields.io/github/actions/workflow/status/Kaliiiiiiiiii-Vinyzu/patchright-python/patchright_tests.yml?label=Patchright%20Python%20Tests">
<img src="https://img.shields.io/github/actions/workflow/status/DevEnterpriseSoftware/patchright-dotnet/patchright_test.yml?label=Patchright%20.Net%20Tests">
</p>
#### Patchright es una versión parcheada y no detectada del Framework de Testing y Automatización Playwright. </br> Puede usarse como reemplazo directo de Playwright.
> [!NOTE]
> Este repositorio aloja el Driver de Patchright. Para usar Patchright, consulta el [Paquete de Python](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python), el [Paquete de NodeJS](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-nodejs) o el [Paquete de .Net](https://github.com/DevEnterpriseSoftware/patchright-dotnet/) _impulsado por la comunidad_
> [!IMPORTANT]
> Patchright solo parchea navegadores basados en CHROMIUM. Firefox y Webkit no son compatibles.
---
<details open id="sponsors">
<summary><h3>Patrocinadores</h1></summary>
<sup>¿Quieres patrocinar este proyecto? ¡Contacta a [@vinyzu](https://discordapp.com/users/935224495126487150) en Discord!</sup>
[<img width="60%" alt="NodeMaven Banner" src="https://assets.kitploit.com/production/public/readmes/41476/8409e9fd4ecade7fa018f576c77d6f51fb342f311f9e8e2b49984de007b5a605/fc71d82e04f5dc303d21f905310e811885d8a6a57ddffe892b4164bf12547371-display-v1.webp" />](https://go.nodemaven.com/Vinyzuoctober)
</br>
#### [NodeMaven](https://go.nodemaven.com/Vinyzuoctober): Tu proveedor eficiente de proxies para Web Scraping y Automatización con IPs de alta calidad.
¿Por qué [NodeMaven](https://go.nodemaven.com/Vinyzuoctober)?
🎯 Segmentación por ZIP
</br>
✅ 99.9% de tiempo de actividad
</br>
🔍 Filtrado de IP: los proxies tienen garantizado un fraud score <97%
</br>
🔰 No se requiere KYC
</br>
🎉 Herramientas gratuitas únicas: Proxy Bandwidth Checker, Meta Tag Checker, IP Lookup y otras.
**Códigos especiales** para usuarios de Patchright:
</br>
🔥 **PATCHRIGHT35** - **35% de descuento** en proxies móviles y residenciales
</br>
🔥 **PATCHRIGHT40** - **40% de descuento** en proxies ISP (estáticos)
<sup>Elige calidad y estabilidad con [NodeMaven](https://go.nodemaven.com/Vinyzuoctober).</sup>
</br>
<sup>Consulta el nuevo GitHub de Nodemaven para más soluciones de web scraping y automatización - https://github.com/nodemaven</sup>
---
[<img height="100" alt="swiftproxy banner" src="https://assets.kitploit.com/production/public/readmes/41476/71326e65aa66112fe5c3cd5a61951b775d58850b93eaaf166fd77930681f5174.png" />](https://www.swiftproxy.net/?ref=Vinyzu)
#### [Swiftproxy](https://www.swiftproxy.net/?ref=Vinyzu): Proxies residenciales de alto rendimiento para la recopilación de datos a escala
Diseñado para desarrolladores que necesitan una infraestructura de proxies **fiable** y con capacidad anti-detección. [Swiftproxy](https://www.swiftproxy.net/?ref=Vinyzu) ofrece **conexiones estables**, **altas tasas de éxito** y un control flexible para el **scraping y la automatización a gran escala**.
- 🌍 Más de 195 ubicaciones con IPs residenciales de origen ético
- 🔄 **Sesiones rotativas** y **persistentes** con geolocalización precisa
- ⚡ Optimizado para el **anti-ban** y una **alta tasa de éxito**
- 🔌 Compatibilidad con HTTP / HTTPS / SOCKS5
- 🧪 **Prueba gratuita de 500MB** para testear
- 💸 Código de **descuento especial** para usuarios de Patchright: **PROXY90 - 10%**
<sup> Ideal para: web scraping, automatización, multicuenta y extracción de datos a gran escala </sup>
---
[<img height="90" alt="rapidproxy banner" src="https://assets.kitploit.com/production/public/readmes/41476/2c138417cf7695cb48943327f3d6d9036986882c2a4ffe5e9172f07386a9f229.png" />](https://www.rapidproxy.io/?ref=Vinyzu)
#### [RapidProxy](https://www.rapidproxy.io/?ref=Vinyzu) ofrece una red de proxies estable y de alto rendimiento diseñada para operaciones de datos a gran escala.
[RapidProxy](https://www.rapidproxy.io/?ref=Vinyzu) ofrece:
- 🌍 Más de 90M de IPs residenciales (más de 200 ubicaciones)
- 🔄 **Proxies residenciales rotativos** — desde **$0.65/GB** (tráfico sin caducidad)
- 🧩 **IPs residenciales estáticas** — **$5/IP** (30 días, tráfico ilimitado)
- 🎯 Geolocalización precisa
- ⚡ **Prueba gratuita disponible** — testea el rendimiento de los proxies sin riesgo
- Diseñado para scraping, automatización y flujos de trabajo de datos de alto rendimiento.
- 🔥 Oferta especial: usa el código **RAPID10** para obtener un **10% de descuento**
<sup> Empieza rápido. Escala globalmente. Mantente estable con [RapidProxy](https://www.rapidproxy.io/?ref=Vinyzu). </sup>
---
<div align="center">
<img src="https://assets.kitploit.com/production/public/readmes/41476/f3ac5dd3dd1ac541342eeda194f605fe1e28f9b044c0a90867b6db914c4a1b48/ad967b2ca510d337e9c8e72d654869c8fc75b08b088e358e074a6bbb003e6639-display-v1.webp" width="56" alt="Scrappey">
### Patrocinado por [Scrappey](https://scrappey.com?utm_source=patchright&utm_medium=github&utm_campaign=repo_readme)
</div>
Hacer que el navegador supere la detección es un problema. Mantener los proxies rotando, las huellas digitales
actualizadas y las sesiones activas a lo largo de unos cuantos millones de peticiones es otro distinto. **Scrappey**
se encarga del segundo problema: un único endpoint, páginas resueltas de vuelta.
- **Clearcote** — nuestro propio Chromium parcheado, mantenido internamente, no una compilación estándar
- **Varios motores tras un único endpoint** — bloqueado en una pila, redirigido a otra
- **Clic, escritura, espera y desplazamiento** a través de la API — una sesión real, no un proxy de fetch
- **Proxies residenciales y de centro de datos** incluidos, o trae los tuyos
- **Por petición**, sin mínimo mensual
```bash
curl -X POST "https://publisher.scrappey.com/api/v1?key=YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"cmd": "request.get", "url": "https://example.com"}'
```
Obtén un 10% de descuento con el código `PATCHRIGHT`
[Documentación](https://scrappey.com/docs?utm_source=patchright&utm_medium=github&utm_campaign=repo_readme) · [Discord](https://scrappey.com/discord?utm_source=patchright&utm_medium=github&utm_campaign=repo_readme) · [Obtener una clave de API](https://scrappey.com?utm_source=patchright&utm_medium=github&utm_campaign=repo_readme)
---
[<img height="120" alt="ProxyLane Banner" src="https://assets.kitploit.com/production/public/readmes/41476/ed95563a028e0c1cefb4f5dccc8f7b69653f4c3fb7d5c4b5099b4cd5718714b7/7afb4fb03926a17d778280ff8bc7b2f62f5206d212d2b7525ea6ee90ae8ed0d3-display-v1.webp" />](https://proxylane.dev/?utm_source=patchright&utm_medium=partnership&utm_campaign=patchright_sponsor_202610&utm_content=readme)
</br>
#### [ProxyLane](https://proxylane.dev/?utm_source=patchright&utm_medium=partnership&utm_campaign=patchright_sponsor_202610&utm_content=readme): Proxies residenciales que mantienen consistente cada perfil de Patchright.
Para que la zona horaria reportada coincida con tu proxy, asigna a cada perfil su propia IP fija vinculada a una ciudad y configura la misma zona horaria:
```py
context = playwright.chromium.launch_persistent_context(
user_data_dir="...", channel="chrome", headless=False, no_viewport=True,
proxy={"server": "http://us.gw.proxylane.dev:10000",
"username": "USER_c_US_city_Chicago_s_profile1", # one sticky IP per profile
"password": "PASS"},
timezone_id="America/Chicago", locale="en-US", # match the proxy city
)
```
<sup>Consejo: establece `--webrtc-ip-handling-policy=disable_non_proxied_udp`, de lo contrario [WebRTC expone tu IP real](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python/issues/47).</sup>
:earth_africa: 28M de IPs residenciales en 195 países, segmentación por ciudad, código postal y ASN
</br>
:stopwatch: Sesiones persistentes de hasta 72h, HTTP y SOCKS5
</br>
:money_with_wings: Desde $2/GB, el tráfico nunca caduca
:fire: **PATCHLANE35** - **35% de descuento** para usuarios de Patchright
<sup>Pega el fragmento, añade tus credenciales y ejecuta tu próxima sesión de Patchright en una IP residencial real con [ProxyLane](https://proxylane.dev/?utm_source=patchright&utm_medium=partnership&utm_campaign=patchright_sponsor_202610&utm_content=readme_caption).</sup>
</details>
---
## Parches
### Fuga de [Runtime.enable](https://vanilla.aslushnikov.com/?Runtime.enable)
Este es el parche más importante que utiliza Patchright. Para evitar la detección mediante esta fuga, patchright evita usar [Runtime.enable](https://vanilla.aslushnikov.com/?Runtime.enable) ejecutando Javascript en ExecutionContexts (aislados).
### Fuga de [Console.enable](https://vanilla.aslushnikov.com/?Console.enable)
Patchright parchea esta fuga deshabilitando la API de Console por completo. Esto significa que la funcionalidad de consola no funcionará en Patchright. Si realmente necesitas la consola, quizás te convenga más usar loggers de Javascript, aunque también pueden ser detectados fácilmente.
### Fugas por Command Flags
Patchright modifica los Argumentos Predeterminados de Playwright para evitar la detección mediante Fugas por Command Flag. Esto (lo más importante) afecta a:
- `--disable-blink-features=AutomationControlled` (añadido) para evitar la detección de navigator.webdriver.
- `--enable-automation` (eliminado) para evitar la detección de navigator.webdriver.
- `--disable-popup-blocking` (eliminado) para evitar el bloqueo de popups.
- `--disable-component-update` (eliminado) para evitar la detección como Stealth Driver.
- `--disable-default-apps` (eliminado) para habilitar las apps predeterminadas.
- `--disable-extensions` (eliminado) para habilitar las extensiones
### Fugas generales
Patchright parchea algunas fugas generales en el código base de Playwright. Esto incluye principalmente configuraciones deficientes y puntos de detección obvios.
### Closed Shadow Roots
Patchright es capaz de interactuar con elementos en Closed Shadow Roots. Solo usa los localizadores normales y Patchright hará el resto.
<br/>
Patchright ahora también es capaz de usar XPaths en Closed Shadow Roots.
---
## Stealth
Con la configuración adecuada, actualmente se considera que Patchright es indetectable.
Patchright pasa:
- [Brotector](https://kaliiiiiiiiii.github.io/brotector/) ✅ (con [CDP-Patches](https://github.com/Kaliiiiiiiiii-Vinyzu/CDP-Patches/))
- [Cloudflare](https://cloudflare.com/) ✅
- [Kasada](https://www.kasada.io/) ✅
- [Akamai](https://www.akamai.com/products/bot-manager/) ✅
- [Shape/F5](https://www.f5.com/) ✅
- [Bet365](https://bet365.com/) ✅
- [Datadome](https://datadome.co/products/bot-protection/) ✅
- [Fingerprint.com](https://fingerprint.com/products/bot-detection/) ✅
- [CreepJS](https://abrahamjuliot.github.io/creepjs/) ✅
- [Sannysoft](https://bot.sannysoft.com/) ✅
- [Incolumitas](https://bot.incolumitas.com/) ✅
- [IPHey](https://iphey.com/) ✅
- [Browserscan](https://browserscan.net/) ✅
- [Pixelscan](https://pixelscan.net/) ✅
---
## Bugs
#### Aunque hemos dedicado mucho tiempo a hacer que Patchright sea lo más estable posible, todavía pueden producirse bugs. Si encuentras algún bug, por favor repórtalo en [Issues](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright/issues).
#### Patchright ahora se prueba contra los Playwright Tests después de cada release. Ver [aquí](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python/actions/workflows/patchright_tests.yml)
> [!WARNING]
> Patchright pasa la mayoría, pero no todos, los Playwright tests. Algunos bugs se consideran imposibles de resolver, otros simplemente no son relevantes. Consulta la lista de bugs y su explicación [aquí](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright/issues/30).
#### Basándonos en los Playwright Tests, concluimos que es muy poco probable que te veas afectado por estos bugs en casos de uso habituales.
<details>
<summary><b>Travesuras con los scripts de inicialización</b></summary>
### Explicación
Para poder usar InitScripts sin [Runtime.enable](https://vanilla.aslushnikov.com/?Runtime.enable), Patchright utiliza Playwright Routes para inyectar JavaScript en las solicitudes HTML.
### Errores
Playwright Routes puede causar algunos errores en otras partes de tu código. Los InitScripts de Patchright no causarán ningún error que no causarían las Playwright Routes normales. </br> Si quieres que se corrija alguno de estos errores, tendrás que contactar con el equipo de Playwright.
### Fugas
Los InitScripts de Patchright pueden detectarse mediante ataques de temporización. Sin embargo, actualmente ningún antibot comprueba este tipo de ataque de temporización y probablemente no lo harán durante bastante tiempo. </br> Consideramos que no suponen un gran riesgo de detección.
</details>
---
### TODO
- [x] Implementar la opción de elegir el contexto de ejecución (Main/Isolated).
- [x] Corregir los errores corregibles.
- [x] Implementar el actualizador .patch para mostrar fácilmente los parches de Patchright.
- [x] Configurar pruebas automatizadas en cada nueva versión.
- [x] Implementar Patchright en .NET.
- [ ] Implementar Patchright en Java.
---
## Desarrollo
El despliegue de las nuevas versiones de Patchright es automático, pero pueden aparecer errores debidos a cambios en el código base de Playwright. Las correcciones de estos errores pueden tardar unos días en publicarse.
---
## Apoya nuestro trabajo
Si decides apoyar nuestro trabajo, contacta con [@vinyzu](https://discord.com/users/935224495126487150) o [@steve_abcdef](https://discord.com/users/936292409426477066) en Discord.
---
## Copyright y licencia
© [Vinyzu](https://github.com/Vinyzu/)
Patchright está licenciado bajo [Apache 2.0](https://choosealicense.com/licenses/apache-2.0/)
[Algunas partes](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright/blob/10c5a090e9a1dcd2107c253d65b3d8b27d0670a9/driver_patches/framesPatch.ts#L156-L171) del código base están inspiradas en [Driverless](https://github.com/kaliiiiiiiiii/Selenium-Driverless).
Gracias a [Nick Webson](https://github.com/rebrowser/rebrowser-patches) por la idea de la documentación en archivos .patch.
---
## Aviso legal
Este repositorio se proporciona **únicamente con fines educativos**. \
No se ofrece ninguna garantía en cuanto a exactitud, integridad o idoneidad para ningún propósito. **Úsalo bajo tu propio riesgo**: los autores y mantenedores no asumen **ninguna responsabilidad** por **cualquier daño**, **problema legal** o **incumplimiento de garantía** derivado del uso, la modificación o la distribución de este código.\
**Cualquier uso indebido o infracción legal es responsabilidad exclusiva del usuario**.
---
## Autores
#### Mantenedor activo: [Vinyzu](https://github.com/Vinyzu/) </br> Co-mantenedor: [Kaliiiiiiiiii](https://github.com/kaliiiiiiiiii/)