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…

Что это такое?Это Python-порт Puppeteer, работающий на пропатченной антидетект-сборке Firefox, чтобы сайты с reCAPTCHA, hCaptcha или Cloudflare Turnstile не могли распознать в нём бота, — он позволяет парсить и автоматизировать, не натыкаясь на капчи.
Это готовая замена pyppeteer или отдельный фреймворк?Это drop-in Python-библиотека: тот же API launch, Browser, Page и ElementHandle, что у pyppeteer (Python-порта Puppeteer), так что вы просто меняете импорт и сохраняете существующий код.
Как переключить мой существующий код на pyppeteer на это?Поскольку API полностью совпадает с pyppeteer, миграция — это просто замена импорта; не стоит держать pyppeteer установленным вместе с ним, потому что этот пакет уже реализует его API.
Какая версия Python и ОС мне нужны?Нужен Python 3.11 или новее, и работает он только на Windows x86-64/ARM64 или Linux x86-64/arm64.
Есть ли подвох, прежде чем полагаться на это для парсинга?Сборки для macOS нет, а автор прямо помечает проект как только образовательный, без каких-либо гарантий, так что используйте на свой риск и проверьте законы своей юрисдикции.
Весь ли проект на самом деле под MIT?В основном: в целом MIT, но два файла из драйвера Playwright лицензированы Apache-2.0, а сам пропатченный бинарник Firefox — MPL-2.0.
Как на самом деле работает обход отпечатков?Браузерный отпечаток (navigator, screen, GPU/WebGL, canvas, шрифты, аудио, WebRTC, часовой пояс, сеть) задаётся внутри самого пропатченного движка Firefox, а не внедряется через JavaScript, поэтому выглядит одинаково и в headless, и в обычном режиме.
Подделывает ли он и человеческое поведение мыши и клавиатуры?Да, каждый клик, наведение и перетаскивание следуют естественной траектории мыши с человекоподобным таймингом, а ввод идёт через настоящий путь ввода браузера, так что страницы получают доверенные события вместо синтетических.
Чем это отличается от puppeteer-extra-plugin-stealth?Тот плагин патчит страницу из JavaScript, а его последний содержательный коммит был в середине 2024 года, тогда как invisible_puppeteer патчит Firefox на уровне исходников C++, не оставляя JS-обёртки, которую сайт мог бы обнаружить.
Есть ли родственные проекты для других фреймворков автоматизации?Да: invisibleplaywright предлагает тот же движок с API Playwright, invisibleselenium — с API Selenium, а invisibleplaywrightmcp открывает его ИИ-агентам по MCP.
Creator
feder-cr
Size
12.1 MB
Stars
1.4K
Age
2y
Commits · 90 Days