invisible_puppeteer README

The project's README from github.com/feder-cr/invisible_puppeteer. As one markdown file: README.md.

invisible_puppeteer

Puppeteer gets caught by anti-bots and captchas.
This one runs on an anti-detect Firefox with an undetected fingerprint, compatible with your existing Puppeteer code in Python.

How it works

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.


Install

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.


Usage

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.

Options

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.

CLI

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?

Development

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

License

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.

Disclaimer

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  LinkedIn

tests License: MIT Python 3.11+

invisible_puppeteer (feder-cr/invisible_puppeteer)

Searching Database…

What is this?This is a Python port of Puppeteer that runs on a patched, anti-detect Firefox build so sites using reCAPTCHA, hCaptcha or Cloudflare Turnstile can't tell it's a bot, letting you scrape and automate without hitting captchas.
Is this a drop-in replacement for pyppeteer, or a separate framework?It's a drop-in Python library: the same launch, Browser, Page and ElementHandle API as pyppeteer (Puppeteer's Python port), so you just swap the import and keep your existing code.
How do I switch my existing pyppeteer code over to this?Since the API matches pyppeteer exactly, migrating is just swapping the import; you should not keep pyppeteer installed alongside it because this package already implements its API.
What Python version and OS do I need?You need Python 3.11 or newer, and it only runs on Windows x86-64/ARM64 or Linux x86-64/arm64.
Any catch before I rely on this for scraping?There's no macOS build listed, and the author explicitly flags this as educational-only with no warranties, so use it at your own risk and check the laws of your jurisdiction.
Is the whole project really MIT?Mostly: it's MIT overall, but two files from Playwright's driver are licensed Apache-2.0 and the patched Firefox binary itself is MPL-2.0.
How does the fingerprint evasion actually work?The browser fingerprint (navigator, screen, GPU/WebGL, canvas, fonts, audio, WebRTC, timezone, network) is set inside the patched Firefox engine itself rather than injected via JavaScript, so it looks the same whether headless or headed.
Does it fake human mouse and keyboard behavior too?Yes, every click, hover and drag follows a natural mouse path with human-like timing, and input goes through the browser's real input path so pages receive trusted events instead of synthetic ones.
How is this different from puppeteer-extra-plugin-stealth?That plugin patches the page from JavaScript and its last substantive commit was mid-2024, while invisible_puppeteer patches Firefox at the C++ source level, leaving no JS shim for a site to detect.
Are there sibling projects for other automation frameworks?Yes: invisibleplaywright offers the same engine with Playwright's API, invisibleselenium with Selenium's API, and invisibleplaywrightmcp exposes it to AI agents over MCP.
Creator
feder-cr
Size
12.3 MB
Stars
1.4K
Age
2y
Commits · 90 Days