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

Hyperbrowser Banner Ad
If you’re looking for a high-performance browser automation platform checkout Hyperbrowser. It’s ideal for AI Agents, large-scale web scraping and automated testing.
Hyperbrowser delivers cloud-based browser infrastructure that scales instantly from a few sessions to thousands, with built-in CAPTCHA solving, stealth fingerprinting, and a global proxy network. It integrates seamlessly with Puppeteer, Playwright, and Selenium, so you can be up and running in minutes, no server or proxy management required.

Key Features:

  • Instant scaling: Launch 1,000+ concurrent browsers
  • Captcha Solving: Handles reCAPTCHA, Cloudflare, AWS, and more
  • Stealth mode: Dynamic, human-like fingerprints for undetectable automation
  • Global proxy network: 170+ countries with rotation and geo-targeting
  • Built-in debugging: Live view and session replay for real-time monitoring
  • 1-line integration: Works with Puppeteer, Playwright, Selenium in Node.js or Python

👉 Learn more at hyperbrowser.ai


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.

phantomwright_driver-1.56.1-py3-none-win_arm64.whl (31.2 MB view details)

Uploaded Python 3Windows ARM64

phantomwright_driver-1.56.1-py3-none-win_amd64.whl (35.6 MB view details)

Uploaded Python 3Windows x86-64

phantomwright_driver-1.56.1-py3-none-win32.whl (35.6 MB view details)

Uploaded Python 3Windows x86

phantomwright_driver-1.56.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (46.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

phantomwright_driver-1.56.1-py3-none-macosx_11_0_universal2.whl (40.6 MB view details)

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

phantomwright_driver-1.56.1-py3-none-macosx_11_0_arm64.whl (39.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

phantomwright_driver-1.56.1-py3-none-macosx_10_13_x86_64.whl (40.6 MB view details)

Uploaded Python 3macOS 10.13+ x86-64

File details

Details for the file phantomwright_driver-1.56.1-py3-none-win_arm64.whl.

File metadata

File hashes

Hashes for phantomwright_driver-1.56.1-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 a89d085fc60ece47c25e33113efc8aecb76c480ecc52347f4ed8c4909536db32
MD5 262037d5fb3464bba8024f44c5ce6428
BLAKE2b-256 c86ad31b963d731b8072a8fec00ce0f935730a3812abe07f4b3727f17e386fe0

See more details on using hashes here.

Provenance

The following attestation bundles were made for phantomwright_driver-1.56.1-py3-none-win_arm64.whl:

Publisher: patchright_workflow.yml on StudentWan/phantomwright-driver-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 phantomwright_driver-1.56.1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for phantomwright_driver-1.56.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 57471ab6f85147e32d7d8f5db1fde37507b6cafa60e82573b7039b526216dfe9
MD5 42b1e2e329f1cea2814e6eddf9f2bda9
BLAKE2b-256 b06d0cb406ccb4501062c5aff8bdadb1b4b250a24396051f61eac8d97fd03a83

See more details on using hashes here.

Provenance

The following attestation bundles were made for phantomwright_driver-1.56.1-py3-none-win_amd64.whl:

Publisher: patchright_workflow.yml on StudentWan/phantomwright-driver-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 phantomwright_driver-1.56.1-py3-none-win32.whl.

File metadata

File hashes

Hashes for phantomwright_driver-1.56.1-py3-none-win32.whl
Algorithm Hash digest
SHA256 a5c65af24008857620a00c9740df0163655c7ed84dce042ae2b1bdc6ed96df31
MD5 d93a79476ab61323321e97b846b6cfce
BLAKE2b-256 6bfd9c299232da6f80225b8a416ff41d4b27733db87b0cb0b39b9af738295036

See more details on using hashes here.

Provenance

The following attestation bundles were made for phantomwright_driver-1.56.1-py3-none-win32.whl:

Publisher: patchright_workflow.yml on StudentWan/phantomwright-driver-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 phantomwright_driver-1.56.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for phantomwright_driver-1.56.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0ddb7abdaeb97d4f0f5619a747ec790a40a60abeef08498c2451892dad50cf0e
MD5 724724b20d3c998a65281a5ea445db54
BLAKE2b-256 ebf063600d50192809c9a33016fc6a2318cb97996e72532e4401f1b8d8a33954

See more details on using hashes here.

Provenance

The following attestation bundles were made for phantomwright_driver-1.56.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: patchright_workflow.yml on StudentWan/phantomwright-driver-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 phantomwright_driver-1.56.1-py3-none-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for phantomwright_driver-1.56.1-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 28b81aef9215f688de13428d1c3b55c4e3be6f4fa40c2d2e62be85cc402d8ace
MD5 0b24ec3f03925ffae2bc61dd69e377e9
BLAKE2b-256 60f28e9d47cc08223541dc7b66db6416421fc0d06ad33db4c0d9e946e10c260d

See more details on using hashes here.

Provenance

The following attestation bundles were made for phantomwright_driver-1.56.1-py3-none-manylinux1_x86_64.whl:

Publisher: patchright_workflow.yml on StudentWan/phantomwright-driver-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 phantomwright_driver-1.56.1-py3-none-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for phantomwright_driver-1.56.1-py3-none-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 bb93dabd26fdb729ee6e7f1b24fa75e526f5a6a18c16d4188c4884dd5f602e4d
MD5 8defabffede3677859263b88425ded8d
BLAKE2b-256 61b40b8e3438f7ebc97dca8e913498f47e28efa108a79eb21b9973058dff5f54

See more details on using hashes here.

Provenance

The following attestation bundles were made for phantomwright_driver-1.56.1-py3-none-macosx_11_0_universal2.whl:

Publisher: patchright_workflow.yml on StudentWan/phantomwright-driver-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 phantomwright_driver-1.56.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for phantomwright_driver-1.56.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87399388f24351f97b66a6f86e79151ed198146e5f47f823cfb83a0e5a008c1d
MD5 7c9ac71829ce103339a44fa1fba3e032
BLAKE2b-256 8b9cbf733ab77328aa54182426d702205632e8044edcbdd8609b75388b25d417

See more details on using hashes here.

Provenance

The following attestation bundles were made for phantomwright_driver-1.56.1-py3-none-macosx_11_0_arm64.whl:

Publisher: patchright_workflow.yml on StudentWan/phantomwright-driver-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 phantomwright_driver-1.56.1-py3-none-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for phantomwright_driver-1.56.1-py3-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 cc4f340d43e5180c6dc07c47756df40e78fef1404982a7437bcdceb816894a4f
MD5 95d3f30bd3e8d9589e24ecba2f98e337
BLAKE2b-256 267018994578a87b19d9dfafb268768a74b72ef3f344445f15809f7072bfdd5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for phantomwright_driver-1.56.1-py3-none-macosx_10_13_x86_64.whl:

Publisher: patchright_workflow.yml on StudentWan/phantomwright-driver-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