Skip to main content

Undetected Python version of the Playwright testing and automation library.

Project description

🎭 Patchright Python


Patchright Version GitHub Downloads (all assets, all releases)

Patchright is a patched and undetected version of the Playwright Testing and Automation Framework.
It can be used as a drop-in replacement for Playwright.

[!NOTE]
This repository serves the Patchright-Python Package. To use Patchright with NodeJS, check out the NodeJS Package. Also check out the main Patchright Driver Repository


Sponsors

Want to Sponsor this Project? Contact @vinyzu on Discord!


swiftproxy banner

Swiftproxy: High-Performance Residential Proxies for Scalable Data Collection

Built for developers who need reliable, anti-detection proxy infrastructure. Swiftproxy delivers stable connections, high success rates, and flexible control for large-scale scraping and automation.

  • 🌍 195+ locations with ethically sourced residential IPs
  • 🔄 Rotating & sticky sessions with precise geo-targeting
  • ⚡ Optimized for anti-ban & high success rate
  • 🔌 HTTP / HTTPS / SOCKS5 support
  • 🧪 Free 500MB trial for testing
  • 💸 Special discount code for Patchright users: PROXY90 - 10%

Best for: Web scraping, automation, multi-accounting, and large-scale data extraction


rapidproxy banner

RapidProxy provides a stable and high-performance proxy network built for large-scale data operations.

RapidProxy delivers:

  • 🌍 90M+ Residential IPs (200+ locations)
  • 🔄 Rotating Residential Proxies — from $0.65/GB (non-expiring traffic)
  • 🧩 Static Residential IPs$5/IP (30 days, unlimited traffic)
  • 🎯 Precise geo-targeting
  • Free Trial Available — test proxy performance risk-free
  • Built for scraping, automation, and high-performance data workflows.
  • 🔥 Special Offer: Use code RAPID10 to get 10% off

Start fast. Scale globally. Stay stable with RapidProxy.


NodeMaven Banner

NodeMaven: Your reliable proxy provider with High Quality IPs.
Superb solution for automation, web scraping, SEO research, and social media management.

Why NodeMaven?

✅ 99.9% Uptime
🎯 Sticky sessions up to 7 days
🔍 IP Filtering: Proxies are guaranteed to have fraud score <97%
🔰 No KYC required
💸 Cashback on Traffic - Burn GB and earn up to 10% back

Special codes for Patchright users:
🔥 PATCHRIGHT35 - 35% off to Mobile and Residential Proxies
🔥 PATCHRIGHT40 - 40% off to ISP (Static) Proxies

Choose quality and stability with NodeMaven.


ColaProxy Banner

ColaProxy : Low-Cost Residential Proxies for Scalable Automation, Scraping, and Global Data Access

Why choose ColaProxy?

  • Dynamic Residential Proxies from as low as $0.3/GB
  • Massive residential IP pool across 195+ countries
  • 99.9% uptime with stable and fast connections
  • HTTP / HTTPS / SOCKS5 protocol support
  • Rotating & sticky sessions for flexible automation
  • Precise country-level geo-targeting
  • 24/7 expert support

Need reliable proxies for Patchright automation? ColaProxy offers cost-effective residential, ISP, and mobile proxy solutions for scraping, testing, account management, SEO monitoring, and global data collection. Use coupon code COLA20 to enjoy 20% off your order.

Affordable, stable, and built for developers. Start scaling your Patchright projects with ColaProxy.


Install it from PyPI

# Install Patchright with Pip from PyPI
pip install patchright
# Install Chromium-Driver for Patchright
patchright install chromium

Usage

Just change the import and use it like playwright. Patchright is a drop-in-replacement for Playwright!

[!IMPORTANT]
Patchright only patches CHROMIUM based browsers. Firefox and Webkit are not supported.

# patchright here!
from patchright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto('http://playwright.dev')
    page.screenshot(path=f'example-{p.chromium.name}.png')
    browser.close()
import asyncio
# patchright here!
from patchright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto('http://playwright.dev')
        await page.screenshot(path=f'example-{p.chromium.name}.png')
        await browser.close()

asyncio.run(main())

Best Practice - use Chrome without Fingerprint Injection

To be completely undetected, use the following configuration:

playwright.chromium.launch_persistent_context(
    user_data_dir="...",
    channel="chrome",
    headless=False,
    no_viewport=True,
    # do NOT add custom browser headers or user_agent
    ...
)

[!NOTE]
We recommend using Google Chrome instead of Chromium. You can install it via patchright install chrome (or via any other installation method) and use it with channel="chrome".


Patches

Runtime.enable Leak

This is the biggest Patch Patchright uses. To avoid detection by this leak, patchright avoids using Runtime.enable by executing Javascript in (isolated) ExecutionContexts.

Console.enable Leak

Patchright patches this leak by disabling the Console API all together. This means, console functionality will not work in Patchright. If you really need the console, you might be better off using Javascript loggers, although they also can be easily detected.

Command Flags Leaks

Patchright tweaks the Playwright Default Args to avoid detection by Command Flag Leaks. This (most importantly) affects:

  • --disable-blink-features=AutomationControlled (added) to avoid navigator.webdriver detection.
  • --enable-automation (removed) to avoid navigator.webdriver detection.
  • --disable-popup-blocking (removed) to avoid popup crashing.
  • --disable-component-update (removed) to avoid detection as a Stealth Driver.
  • --disable-default-apps (removed) to enable default apps.
  • --disable-extensions (removed) to enable extensions

General Leaks

Patchright patches some general leaks in the Playwright codebase. This mainly includes poor setups and obvious detection points.

Closed Shadow Roots

Patchright is able to interact with elements in Closed Shadow Roots. Just use normal locators and Patchright will do the rest.
Patchright is now also able to use XPaths in Closed Shadow Roots.


Stealth

With the right setup, Patchright currently is considered undetectable. Patchright passes:


Documentation and API Reference

See the original Playwright Documentation and API Reference

Extended Patchright API

evaluate Method (Frame.evaluate, Page.evaluate, Locator.evaluate, Worker.evaluate, JSHandle.evaluate)

  • Added isolated_context to choose Execution Context (Main/Isolated). Bool (optional, Defaults to True)
object.evaluate(
    expression: str,
    arg: typing.Optional[typing.Any] = None,
    ...,
+   isolated_context: typing.Optional[bool] = True
)

evaluate_handle Method (Frame.evaluate_handle, Page.evaluate_handle, Locator.evaluate_handle, Worker.evaluate_handle, JSHandle.evaluate)

  • Added isolated_context to choose Execution Context (Main/Isolated). Bool (optional, Defaults to True)
object.evaluate_handle(
    expression: str,
    arg: typing.Optional[typing.Any] = None,
    ...,
+   isolated_context: typing.Optional[bool] = True
)

evaluate_all Method (Locator.evaluate_all)

  • Added isolated_context to choose Execution Context (Main/Isolated). Bool (optional, Defaults to True)
Locator.evaluate_all(
    expression: str,
    arg: typing.Optional[typing.Any] = None,
    ...,
+   isolated_context: typing.Optional[bool] = True
)

Bugs

The bugs are documented in the Patchright Driver Repository.


TODO

The TODO is documented in the Patchright Driver Repository.


Development

Deployment of new Patchright versions are automatic, but bugs due to Playwright codebase changes may occur. Fixes for these bugs might take a few days to be released.


Support our work

If you choose to support our work, please contact @vinyzu or @steve_abcdef on Discord.


Copyright and License

© Vinyzu

Patchright is licensed Apache 2.0


Disclaimer

This repository is provided for educational purposes only.
No warranties are provided regarding accuracy, completeness, or suitability for any purpose. Use at your own risk—the authors and maintainers assume no liability for any damages, legal issues, or warranty breaches resulting from use, modification, or distribution of this code.
Any misuse or legal violations are the sole responsibility of the user.


Authors

Active Maintainer: Vinyzu
Co-Maintainer: Kaliiiiiiiiii

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

patchright-1.61.2-py3-none-win_arm64.whl (34.3 MB view details)

Uploaded Python 3Windows ARM64

patchright-1.61.2-py3-none-win_amd64.whl (38.2 MB view details)

Uploaded Python 3Windows x86-64

patchright-1.61.2-py3-none-win32.whl (38.2 MB view details)

Uploaded Python 3Windows x86

patchright-1.61.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (47.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

patchright-1.61.2-py3-none-manylinux1_x86_64.whl (47.7 MB view details)

Uploaded Python 3

patchright-1.61.2-py3-none-macosx_11_0_universal2.whl (43.7 MB view details)

Uploaded Python 3macOS 11.0+ universal2 (ARM64, x86-64)

patchright-1.61.2-py3-none-macosx_11_0_arm64.whl (42.5 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

patchright-1.61.2-py3-none-macosx_10_13_x86_64.whl (43.7 MB view details)

Uploaded Python 3macOS 10.13+ x86-64

File details

Details for the file patchright-1.61.2-py3-none-win_arm64.whl.

File metadata

  • Download URL: patchright-1.61.2-py3-none-win_arm64.whl
  • Upload date:
  • Size: 34.3 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for patchright-1.61.2-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 3dee1e2daada9f98653763831f688d39c924e0cf0eeb988e8047b703766cee73
MD5 a0af507b935d02764baf83534981035d
BLAKE2b-256 339667a791c6b7cd76424b44d356beaf414ab97c3aef2d42fad4641e7905b41d

See more details on using hashes here.

Provenance

The following attestation bundles were made for patchright-1.61.2-py3-none-win_arm64.whl:

Publisher: patchright_release.yml on Kaliiiiiiiiii-Vinyzu/patchright-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file patchright-1.61.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: patchright-1.61.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 38.2 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for patchright-1.61.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 506bca9b72e609fd8fee35e2a3ad26e5d92e25337002f5c2cdad53d5cacb0b67
MD5 69d9dd69746726215a37d67f7ee639f6
BLAKE2b-256 46c8fceb57b9d32ed078f53fc6a757c6e4b54cb117f59412938252a3359105e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for patchright-1.61.2-py3-none-win_amd64.whl:

Publisher: patchright_release.yml on Kaliiiiiiiiii-Vinyzu/patchright-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file patchright-1.61.2-py3-none-win32.whl.

File metadata

  • Download URL: patchright-1.61.2-py3-none-win32.whl
  • Upload date:
  • Size: 38.2 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for patchright-1.61.2-py3-none-win32.whl
Algorithm Hash digest
SHA256 a5aaf4cec2bd38714f2447f84bcdfe7dcb592a16e9616bf6d2d872066d1c78af
MD5 77812154332109ed94b1aae489f69f48
BLAKE2b-256 6c6ece2c5d03a4c785ac8f3e0180bbf83ef85149cf41fdfa41c09bd8cbcfd945

See more details on using hashes here.

Provenance

The following attestation bundles were made for patchright-1.61.2-py3-none-win32.whl:

Publisher: patchright_release.yml on Kaliiiiiiiiii-Vinyzu/patchright-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file patchright-1.61.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for patchright-1.61.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1824da30cf6560749bc1bb4a7f002fec325d5b709090dd7c8c1b643899331cee
MD5 85ebd5881beb35c01891f4789fb66fb9
BLAKE2b-256 19ef5de6feaedf47a6ba8efb9e8c4f8a42bad29cc59c35bbd088b1729a36b271

See more details on using hashes here.

Provenance

The following attestation bundles were made for patchright-1.61.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: patchright_release.yml on Kaliiiiiiiiii-Vinyzu/patchright-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file patchright-1.61.2-py3-none-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for patchright-1.61.2-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 545bdf2c0bb5f9ad78ab315e91c8c2990cc6a702e7f18650b71fe1071049b5c1
MD5 8c71bec4017ebfbf17944f35bf23e589
BLAKE2b-256 a2b5c76dcda275cb0d9651321e343f3268609ae24cef196bff56751754ffba16

See more details on using hashes here.

Provenance

The following attestation bundles were made for patchright-1.61.2-py3-none-manylinux1_x86_64.whl:

Publisher: patchright_release.yml on Kaliiiiiiiiii-Vinyzu/patchright-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file patchright-1.61.2-py3-none-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for patchright-1.61.2-py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 edef852aa7d28791fa2d3f7ce135edfea2ce07a2bc5e0a74fb2dfe269af62223
MD5 da24d00f361681857e5292cea949f272
BLAKE2b-256 e4d0d730536a7fc43c3aaf2781518595ca71ffa1fc2f24e580c0d0cf04e00eca

See more details on using hashes here.

Provenance

The following attestation bundles were made for patchright-1.61.2-py3-none-macosx_11_0_universal2.whl:

Publisher: patchright_release.yml on Kaliiiiiiiiii-Vinyzu/patchright-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file patchright-1.61.2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for patchright-1.61.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a3da24d7890631255c7bef467b94ffe7f7bfa36f96fc72c10d5787d3cb396873
MD5 49e99e0de01e28397e5324af135ba3f1
BLAKE2b-256 57e71ff89853c9aeaf26cd20559f401375ec71a40e4041cf7ace03d41a741f06

See more details on using hashes here.

Provenance

The following attestation bundles were made for patchright-1.61.2-py3-none-macosx_11_0_arm64.whl:

Publisher: patchright_release.yml on Kaliiiiiiiiii-Vinyzu/patchright-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file patchright-1.61.2-py3-none-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for patchright-1.61.2-py3-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 43ae10cd2a3e46b222179a120ab39ba88f801f3a42aa41cab45fac9928f2103d
MD5 316459230994e340d47e5b4ba1cc6c6a
BLAKE2b-256 7942a76e2ea17dd4feccbf5ef6df017fb2e67f4b72a6f559f59d9aad1197f83a

See more details on using hashes here.

Provenance

The following attestation bundles were made for patchright-1.61.2-py3-none-macosx_10_13_x86_64.whl:

Publisher: patchright_release.yml on Kaliiiiiiiiii-Vinyzu/patchright-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page