The project's README from github.com/feder-cr/invisible_puppeteer. As one markdown file: README.md.
Anti-bots ask two questions, and reCAPTCHA, hCaptcha and Cloudflare Turnstile score the answers. invisible_puppeteer answers yes to both.
1. Is this a real browser? Yes. It is Firefox, patched at the C++ source level.
2. Is a real person using it? Yes. The actions are humanized in the driver.
pip install invisible-puppeteer
python -m invisible_puppeteer fetch # one-time download of the patched Firefox, sha256-verified
Requires Python 3.11 or newer. Supported platforms: Windows x86_64 / ARM64 (the x86_64 engine, under Windows' own emulation), Linux x86_64 / arm64.
Puppeteer's API in Python, with no code changes. The same launch, Browser, Page and ElementHandle as pyppeteer, Puppeteer's Python port. If you already use it, switching is the import:
- from pyppeteer import launch
+ from invisible_puppeteer import launch
import asyncio
from invisible_puppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto("https://example.com")
await page.click("a") # the mouse arcs to the link
print("seed =", browser.seed) # log it to replay the run
await browser.close()
asyncio.run(main())
Every session gets a distinct fingerprint (GPU, audio, fonts, screen, ~200 fields). Do not install pyppeteer alongside it: this package already implements its API.
browser = await launch(
seed=42, # same seed, same fingerprint, every run
proxy={"server": "socks5://host:1080", "username": "u", "password": "p"},
timezone="America/New_York", # default: derived from the proxy's exit IP
pin={"screen.width": 2560, "screen.height": 1440}, # force fields, the rest stays seed-derived
headless=True, # the default: hidden desktop, real rendering, same fingerprint as headed
userDataDir="./profile", # cookies and storage survive the run
)
Proxies can be socks5, socks4, http or https, and DNS goes through them too. The viewport defaults to the fingerprint's screen size instead of Puppeteer's 800x600. The fields you can pin are the same as in invisible_playwright: pinning.
invisible-puppeteer fetch # download the engine if missing, check every cached one, print the path
invisible-puppeteer version # wrapper, core and engine versions
Switching from another tool?
git clone https://github.com/feder-cr/invisible_puppeteer && cd invisible_puppeteer
uv venv && uv pip install -e ".[dev]"
uv run pytest -q # unit
uv run pytest -q -m e2e # against the real browser
MIT, see LICENSE, except two files taken from Playwright's driver, which are Apache-2.0 (THIRD_PARTY.md). The patched Firefox binary is MPL-2.0, built from feder-cr/firefox_antidetect_patch.
This project is for educational purposes only. It is provided as-is, with no warranties. I take no responsibility for how it is used. Use it at your own risk and in compliance with the laws of your jurisdiction.
Built by Federico Elia