
Необнаруживаемая версия библиотеки тестирования и автоматизации 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 — это пропатченная и необнаруживаемая версия фреймворка для тестирования и автоматизации Playwright. </br> Его можно использовать как замену Playwright без изменения кода.
> [!NOTE]
> Этот репозиторий содержит драйвер Patchright. Чтобы использовать Patchright, ознакомьтесь с [пакетом для Python](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python), [пакетом для NodeJS](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-nodejs) или _поддерживаемым сообществом_ [пакетом для .Net](https://github.com/DevEnterpriseSoftware/patchright-dotnet/)
> [!IMPORTANT]
> Patchright патчит только браузеры на основе CHROMIUM. Firefox и Webkit не поддерживаются.
---
<details open id="sponsors">
<summary><h3>Спонсоры</h1></summary>
<sup>Хотите стать спонсором этого проекта? Свяжитесь с [@vinyzu](https://discordapp.com/users/935224495126487150) в 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): ваш эффективный провайдер прокси для веб-скрапинга и автоматизации с высококачественными IP-адресами.
Почему [NodeMaven](https://go.nodemaven.com/Vinyzuoctober)?
🎯 Таргетинг по ZIP-коду
</br>
✅ Время безотказной работы 99,9%
</br>
🔍 Фильтрация IP: гарантируется, что показатели мошенничества прокси будут <97%
</br>
🔰 KYC не требуется
</br>
🎉 Уникальные бесплатные инструменты: Proxy Bandwidth Checker, Meta Tag Checker, IP Lookup и другие!
**Специальные коды** для пользователей Patchright:
</br>
🔥 **PATCHRIGHT35** — **скидка 35%** на мобильные и резидентные прокси
</br>
🔥 **PATCHRIGHT40** — **скидка 40%** на ISP (статические) прокси
<sup>Выбирайте качество и стабильность с [NodeMaven](https://go.nodemaven.com/Vinyzuoctober).</sup>
</br>
<sup>Ознакомьтесь с новым GitHub от Nodemaven — больше решений для веб-скрапинга и автоматизации: 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): высокопроизводительные резидентные прокси для масштабируемого сбора данных
Созданы для разработчиков, которым нужна **надёжная** прокси-инфраструктура с защитой от обнаружения. [Swiftproxy](https://www.swiftproxy.net/?ref=Vinyzu) обеспечивает **стабильные соединения**, **высокий процент успеха** и гибкий контроль для **масштабного скрапинга и автоматизации**.
- 🌍 Более 195 локаций с этично полученными резидентными IP
- 🔄 **Ротация** и **липкие сессии** с точным геотаргетингом
- ⚡ Оптимизировано для **обхода блокировок** и **высокого процента успеха**
- 🔌 Поддержка HTTP / HTTPS / SOCKS5
- 🧪 **Бесплатный пробный период 500 МБ** для тестирования
- 💸 **Специальный промокод** для пользователей Patchright: **PROXY90 — 10%**
<sup> Лучше всего подходит для: веб-скрапинга, автоматизации, мультиаккаунтинга и масштабного извлечения данных </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) предоставляет стабильную и высокопроизводительную прокси-сеть, созданную для масштабных операций с данными.
[RapidProxy](https://www.rapidproxy.io/?ref=Vinyzu) предлагает:
- 🌍 Более 90 млн резидентных IP (более 200 локаций)
- 🔄 **Ротирующиеся резидентные прокси** — от **$0.65/ГБ** (трафик без срока действия)
- 🧩 **Статические резидентные IP** — **$5/IP** (30 дней, безлимитный трафик)
- 🎯 Точный геотаргетинг
- ⚡ **Доступен бесплатный пробный период** — протестируйте производительность прокси без риска
- Создано для скрапинга, автоматизации и высокопроизводительных рабочих процессов с данными.
- 🔥 Специальное предложение: используйте код **RAPID10**, чтобы получить **скидку 10%**
<sup> Начните быстро. Масштабируйтесь глобально. Оставайтесь стабильными с [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">
### При поддержке [Scrappey](https://scrappey.com?utm_source=patchright&utm_medium=github&utm_campaign=repo_readme)
</div>
Провести браузер мимо систем обнаружения — это одна задача. Держать прокси в ротации, отпечатки
актуальными, а сессии живыми на протяжении нескольких миллионов запросов — совсем другая. **Scrappey**
берёт на себя вторую задачу: одна конечная точка, а решённые страницы возвращаются обратно.
- **Clearcote** — наш собственный пропатченный Chromium, поддерживаемый внутри компании, а не стандартная сборка
- **Несколько движков за одной конечной точкой** — заблокировали на одном стеке, перенаправим на другой
- **Клик, ввод, ожидание и прокрутка** через API — настоящая сессия, а не прокси для запросов
- **Резидентные и датацентровые прокси** включены, или используйте свои
- **Оплата за запрос**, без ежемесячного минимума
```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"}'
```
Получите скидку 10% по коду `PATCHRIGHT`
[Документация](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) · [Получить 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): резидентные прокси, обеспечивающие согласованность каждого профиля Patchright.
Чтобы привести сообщаемый часовой пояс в соответствие с вашим прокси, назначьте каждому профилю собственный липкий IP, привязанный к городу, и задайте тот же часовой пояс:
```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>Совет: установите `--webrtc-ip-handling-policy=disable_non_proxied_udp`, иначе [WebRTC раскрывает ваш реальный IP](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python/issues/47).</sup>
:earth_africa: 28 млн резидентных IP в 195 странах, таргетинг по городу, ZIP-коду и ASN
</br>
:stopwatch: Sticky-сессии до 72 ч, HTTP и SOCKS5
</br>
:money_with_wings: От $2/ГБ, трафик не сгорает
:fire: **PATCHLANE35** — **скидка 35%** для пользователей Patchright
<sup>Вставьте фрагмент, добавьте свои учётные данные и запустите следующую сессию Patchright на реальном резидентном IP с [ProxyLane](https://proxylane.dev/?utm_source=patchright&utm_medium=partnership&utm_campaign=patchright_sponsor_202610&utm_content=readme_caption).</sup>
</details>
---
## Патчи
### Утечка [Runtime.enable](https://vanilla.aslushnikov.com/?Runtime.enable)
Это самый важный патч, который использует Patchright. Чтобы избежать обнаружения через эту утечку, patchright избегает использования [Runtime.enable](https://vanilla.aslushnikov.com/?Runtime.enable), выполняя Javascript в (изолированных) ExecutionContexts.
### Утечка [Console.enable](https://vanilla.aslushnikov.com/?Console.enable)
Patchright закрывает эту утечку, полностью отключая Console API. Это означает, что функциональность консоли в Patchright работать не будет. Если вам действительно нужна консоль, возможно, лучше использовать Javascript-логгеры, хотя их тоже легко обнаружить.
### Утечки через флаги команд
Patchright изменяет аргументы Playwright по умолчанию, чтобы избежать обнаружения через утечки флагов команд. Это (что наиболее важно) затрагивает:
- `--disable-blink-features=AutomationControlled` (добавлен) для предотвращения обнаружения navigator.webdriver.
- `--enable-automation` (удалён) для предотвращения обнаружения navigator.webdriver.
- `--disable-popup-blocking` (удалён) для предотвращения сбоев всплывающих окон.
- `--disable-component-update` (удалён) для предотвращения обнаружения как Stealth Driver.
- `--disable-default-apps` (удалён) для включения приложений по умолчанию.
- `--disable-extensions` (удалён) для включения расширений
### Общие утечки
Patchright закрывает некоторые общие утечки в кодовой базе Playwright. В основном это касается плохих настроек и очевидных точек обнаружения.
### Закрытые Shadow Roots
Patchright способен взаимодействовать с элементами в закрытых Shadow Roots. Просто используйте обычные локаторы, а остальное Patchright сделает сам.
<br/>
Теперь Patchright также умеет использовать XPath в закрытых Shadow Roots.
---
## Скрытность
При правильной настройке Patchright в настоящее время считается необнаружимым.
Patchright проходит:
- [Brotector](https://kaliiiiiiiiii.github.io/brotector/) ✅ (с [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/) ✅
---
## Баги
#### Несмотря на то, что мы потратили много времени, чтобы сделать Patchright максимально стабильным, баги всё ещё могут возникать. Если вы столкнётесь с какими-либо багами, пожалуйста, сообщите о них в [Issues](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright/issues).
#### Теперь Patchright после каждого релиза тестируется на тестах Playwright. См. [здесь](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python/actions/workflows/patchright_tests.yml)
> [!WARNING]
> Patchright проходит большинство, но не все тесты Playwright. Некоторые баги считаются нерешаемыми, некоторые просто не имеют значения. Список багов и их объяснение см. [здесь](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright/issues/30).
#### Основываясь на тестах Playwright, мы пришли к выводу, что крайне маловероятно, что вы столкнётесь с этими багами в обычных сценариях использования.
<details>
<summary><b>Манипуляции с Init Script</b></summary>
### Объяснение
Чтобы иметь возможность использовать InitScripts без [Runtime.enable](https://vanilla.aslushnikov.com/?Runtime.enable), Patchright использует Playwright Routes для внедрения JavaScript в HTML-запросы.
### Ошибки
Playwright Routes могут вызывать некоторые ошибки в других частях вашего кода. Patchright InitScripts не вызовут никаких ошибок, которые не были бы вызваны обычными Playwright Routes. </br> Если вы хотите исправить какие-либо из этих ошибок, вам придётся связаться с командой Playwright.
### Утечки
Patchright InitScripts можно обнаружить с помощью Timing-атак. Однако на данный момент ни один антибот не проверяет такой тип Timing-атак, и, вероятно, не будет в течение длительного времени. </br> Мы считаем, что они не представляют большого риска обнаружения.
</details>
---
### TODO
- [x] Реализовать опцию выбора контекста выполнения (Main/Isolated).
- [x] Исправить исправимые ошибки.
- [x] Реализовать обновлятор .patch для удобного отображения патчей Patchright.
- [x] Настроить автоматическое тестирование для новых релизов.
- [x] Реализовать Patchright на .NET.
- [ ] Реализовать Patchright на Java.
---
## Разработка
Развёртывание новых версий Patchright выполняется автоматически, но из-за изменений в кодовой базе Playwright могут возникать ошибки. Исправления этих ошибок могут занять несколько дней до выпуска.
---
## Поддержите нашу работу
Если вы хотите поддержать нашу работу, свяжитесь с [@vinyzu](https://discord.com/users/935224495126487150) или [@steve_abcdef](https://discord.com/users/936292409426477066) в Discord.
---
## Авторские права и лицензия
© [Vinyzu](https://github.com/Vinyzu/)
Patchright распространяется по лицензии [Apache 2.0](https://choosealicense.com/licenses/apache-2.0/)
[Некоторые части](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright/blob/10c5a090e9a1dcd2107c253d65b3d8b27d0670a9/driver_patches/framesPatch.ts#L156-L171) кодовой базы вдохновлены [Driverless](https://github.com/kaliiiiiiiiii/Selenium-Driverless).
Спасибо [Nick Webson](https://github.com/rebrowser/rebrowser-patches) за идею документации в виде .patch-файлов.
---
## Отказ от ответственности
Этот репозиторий предоставляется **исключительно в образовательных целях**. \
Никаких гарантий относительно точности, полноты или пригодности для каких-либо целей не предоставляется. **Используйте на свой страх и риск** — авторы и сопровождающие **не несут ответственности** за **любой ущерб**, **юридические проблемы** или **нарушения гарантий**, возникшие в результате использования, изменения или распространения этого кода.\
**Любое неправомерное использование или нарушение законодательства является исключительной ответственностью пользователя**.
---
## Авторы
#### Активный сопровождающий: [Vinyzu](https://github.com/Vinyzu/) </br> Со-сопровождающий: [Kaliiiiiiiiii](https://github.com/kaliiiiiiiiii/)