Назад к обновлениям
New releaseSep 18, 2026

invisible_playwright v0.20.0

Playwright, невидимый для антиботов, поэтому без капчи: тот же API, антидетект-стелс headless Firefox, необнаружимый отпечаток, обход обнаружения ботов, веб-скрейпинг и автоматизация браузера на Python.

Поделиться
invisible_playwright

Playwright ловится антиботами и капчами.
Этот работает на антидетект-сборке Firefox с недетектируемым отпечатком и совместим с вашим существующим кодом Playwright.

invisible_playwright - 5/5 detection suites passed

Как это работает

Антиботы задают два вопроса, а reCAPTCHA, hCaptcha и Cloudflare Turnstile оценивают ответы. invisible_playwright отвечает «да» на оба.

1. Это настоящий браузер? Да. Это Firefox, пропатченный на уровне исходников C++.

  • Отпечаток браузера задаётся внутри движка, а не внедряется в страницу: navigator, screen, GPU/WebGL, canvas, шрифты, аудио, WebRTC, часовой пояс, сеть. Headless или headed — значения одинаковые в обоих случаях.
  • Никаких JS-шимов, никаких переопределений, никаких швов, за которые можно зацепиться.

2. Им пользуется реальный человек? Да. Действия гуманизированы в драйвере.

  • Каждый клик, наведение и перетаскивание следует естественной траектории мыши с человеческим таймингом, без телепортации курсора.
  • Каждый ввод побайтово идентичен реальной мыши: настоящий источник ввода, давление, доверенные события.

Установка

pip install invisible-playwright
python -m invisible_playwright fetch      # one-time download, sha256-verified: 240 MB (Windows) / 262 MB (Linux x86_64) / 253 MB (Linux arm64), about 550 MB unpacked

Требуется Python 3.11 или новее.

Поддерживаемые платформы: Windows x86_64, Linux x86_64 / arm64.


Использование

Случайный отпечаток для каждой сессии

API Playwright, синхронный и асинхронный, без изменений в коде. Те же объекты, те же вызовы, те же возвращаемые значения. Несколько поверхностей вне области охвата — tracing, HAR, CDP, контекст API-запросов — и каждая из них отказывает с пояснением причины, а не ведёт себя тихо и неправильно. Если вы уже используете Playwright, переход занимает две строки:

- from playwright.sync_api import sync_playwright
- with sync_playwright() as p:
-     browser = p.firefox.launch()
+ from invisible_playwright import InvisiblePlaywright
+ with InvisiblePlaywright() as browser:

Каждая сессия получает уникальный отпечаток (GPU, аудио, шрифты, экран, ~200 полей) и движение мыши по кривым Безье.

Синхронный

from invisible_playwright import InvisiblePlaywright

with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
    page = browser.new_page()
    page.goto("https://example.com")
    page.click("#submit")   # mouse arcs to the button on a Bezier curve

Асинхронный

from invisible_playwright.async_api import InvisiblePlaywright

async with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
    page = await browser.new_page()
    await page.goto("https://example.com")
    await page.click("#submit")

Объект browser — это playwright.sync_api.Browser / playwright.async_api.Browser — каждый метод Playwright работает как есть.

Залогируйте seed, чтобы воспроизвести запуск:

sf = InvisiblePlaywright()
with sf as browser:
    print("seed =", sf.seed)
    # ...

Воспроизводимый отпечаток

with InvisiblePlaywright(seed=42) as browser:
    ...   # same GPU, same canvas hash, same audio context, every run

Прокси

proxy = {
    "server": "socks5://gate.example.com:1080",
    "username": "user",
    "password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
    ...

Поддерживаемые схемы: socks5, socks4, http, https. DNS по умолчанию маршрутизируется через прокси, без локальной утечки.

Часовой пояс

Часовой пояс браузера следует за timezone=:

# default: timezone is auto-derived from the egress IP (proxy egress if a
# proxy is set, otherwise the host's own public IP)
with InvisiblePlaywright(proxy=proxy) as browser:
    ...

# explicit IANA zone always wins, the only way to force a specific zone
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
    ...

Фиксация конкретных полей отпечатка

По умолчанию всё берётся из seed. Чтобы принудительно задать конкретные значения, пока остальное остаётся производным от seed:

with InvisiblePlaywright(
    seed=42,
    pin={
        "gpu.renderer": "ANGLE (AMD, Radeon R9 200 Series Direct3D11 vs_5_0 ps_5_0, D3D11)",
        "gpu.vendor":   "Google Inc. (AMD)",
        "screen.width":  2560,
        "screen.height": 1440,
        "hardware.concurrency": 16,
    },
) as browser:
    ...

Фиксация GPU выбирает одну из проверенных персон, а не задаёт произвольную строку, потому что ~81 значение getParameter и список расширений идут в связке с именем рендерера, и детектор сверяет их с ним. Имя, которого нет в пуле, вызывает исключение, и в ошибке перечислены те, что есть.

Полный список фиксируемых ключей, то, как фиксация взаимодействует с байесовским сэмплером, и типовые шаблоны — в docs/pinning.md.


CLI

Установленная команда — invisible-playwright, через дефис. python -m invisible_playwright работает идентично и не требует ничего в PATH.

invisible-playwright fetch    # download the engine if missing, check every cached
                              # one against the seal, print the path
invisible-playwright version  # wrapper, core and engine versions, and where the
                              # engine is cached

Документация, руководства и сравнения

Если вам проще писать промпты, чем скрипты. Эта страница — движок в виде библиотеки Python. Два способа использовать его без написания кода, оба в одну строку: из MCP-клиента, который у вас уже есть (Claude Code, Claude Desktop, Cursor), claude mcp add stealth -- uvx aihawk, см. страницу MCP-сервера; или с интерфейсом и моделью в комплекте, нужен только ключ OpenRouter, uvx aihawk ui --openrouter-key sk-or-..., см. AIHawk. В основе тот же движок, а второй — клиент первого.

Всё это лучше читается и доступно для поиска в вики, организованной в четыре раздела вместо одного плоского списка:

  • Документация — установка, переключение с обычного Playwright в две строки, настройка прокси/часового пояса, фиксация конкретных полей, CLI.
  • Руководства — как на самом деле работает детектирование, в семи группах: идентичность браузера, canvas/WebGL/шрифты/ аудио, сеть и WebRTC, слой автоматизации, ИИ-агенты, сами детекторы, разобранные по исходникам, и тестирование.
  • Сравнения — с Camoufox, Patchright, nodriver и playwright-stealth, а также аргументы в пользу Firefox вместо Chromium в целом.
  • Интеграции — Scrapy, Crawlee, Robot Framework, CodeceptJS, тест-раннеры, Playwright MCP и фреймворки, которым он не подходит, по названиям.

Категории