
invisible_playwright v0.7.0
Бесплатный антидетект stealth-браузер для Playwright: необнаруживаемый отпечаток headless Firefox. Python-скрапинг, обход recaptcha и антибот-систем. Открытый исходный код.
Бесплатная антидетект-стелс-технология для Playwright: недетектируемый отпечаток Firefox, headless или с окном.
Веб-скрапинг на Python и обход капчи. Open source, проходит все тесты на обнаружение ботов.

Как это работает
Антибот-системы задают два вопроса, и reCAPTCHA, hCaptcha и Cloudflare Turnstile оценивают ответы. invisible_playwright отвечает «да» на оба.
1. Это настоящий браузер? Да. Это Firefox, пропатченный на уровне исходного кода C++.
- Отпечаток браузера задаётся внутри движка, а не внедряется в страницу: navigator, screen, GPU/WebGL, canvas, шрифты, audio, WebRTC, часовой пояс, сеть. Headless или с окном — значения одинаковы в обоих случаях.
- Никаких JS-шимов, никаких переопределений, никаких швов для чтения.
2. Его использует реальный человек? Да. Действия очеловечены в драйвере.
- Каждый клик, наведение и перетаскивание следуют естественной траектории мыши с человеческим таймингом, без телепортации курсора.
- Каждый ввод байт-в-байт идентичен реальной мыши: реальный источник ввода, давление, доверенные события.
Управляется стандартным API Playwright. Полный разбор: feder-cr/firefox_antidetect_patch.
Всё ещё видите капчи или антибот? Дело в прокси.
Как только браузер обработан, он перестаёт быть переменной. Если вас всё ещё блокируют, дело уже не в браузере, а в IP-адресе, с которого вы заходите. Около 90% прокси являются публичными: любой может арендовать тот же адрес, поэтому он уже известен и находится в списках заблокированных IP, которые проверяют сайты. Идеальный браузер с известного IP всё равно проигрывает.
Установка
pip install invisible-playwright
python -m invisible_playwright fetch # однократная загрузка ~238 МБ (~544 МБ в распакованном виде), проверка sha256
Поддерживаемые платформы: Windows x86_64, Linux x86_64 / arm64. macOS больше не поддерживается (релизы прекратились на firefox-20); на Mac пакет отказывается запускаться с понятным сообщением, а не скачивает бинарник, которого больше не существует.
Использование
Случайный отпечаток для каждой сессии
100% совместимость с Playwright — синхронный и асинхронный режимы, все методы, ноль изменений в 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, audio, шрифты, screen, ~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") # мышь движется к кнопке по кривой Безье
Асинхронный режим
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:
... # тот же GPU, тот же canvas-хеш, тот же audio-контекст, при каждом запуске
Прокси
proxy = {
"server": "socks5://gate.example.com:1080",
"username": "user",
"password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
...
Поддерживаемые схемы: socks5, socks4, http, https. DNS маршрутизируется через прокси по умолчанию, без локальных утечек.
Часовой пояс
Часовой пояс браузера следует за timezone=:
# по умолчанию: часовой пояс автоматически определяется по исходящему IP (по IP прокси,
# если прокси задан, иначе по собственному публичному IP хоста)
with InvisiblePlaywright(proxy=proxy) as browser:
...
# явная IANA-зона всегда имеет приоритет, это единственный способ принудительно задать конкретную зону
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
...
Фиксация конкретных полей отпечатка
По умолчанию всё определяется из seed. Чтобы принудительно задать конкретные значения, пока остальное остаётся производным от seed:
with InvisiblePlaywright(
seed=42,
pin={
"gpu.renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 Direct3D11)",
"gpu.vendor": "Google Inc. (NVIDIA)",
"screen.width": 2560,
"screen.height": 1440,
"hardware.concurrency": 16,
},
) as browser:
...
Полный список фиксируемых ключей, как фиксация взаимодействует с байесовским сэмплером, и типовые сценарии — в docs/pinning.md.
CLI
Установленная команда — invisible-playwright, с дефисом. python -m invisible_playwright работает идентично и не требует ничего в PATH.
invisible-playwright fetch # загрузить движок, если отсутствует, проверить каждый кэшированный
# на соответствие печати, вывести путь
invisible-playwright version # версии обёртки, ядра и движка, а также где
# кэшируется движок
Документация, руководства и сравнения
Всё это читается лучше и доступно для поиска в вики, организованной в четыре раздела вместо одного плоского списка:
- Документация — установка, переход в две строки с обычного Playwright, настройка прокси/часового пояса, фиксация конкретных полей, CLI.
- Руководства — как обнаружение работает на самом деле, в семи группах: идентичность браузера, canvas/WebGL/шрифты/ audio, сеть и WebRTC, уровень автоматизации, AI-агенты, сами детекторы с объяснением из исходного кода, и тестирование.
- Сравнения — с Camoufox, Patchright, nodriver и playwright-stealth, а также обоснование выбора Firefox вместо Chromium в целом.
- Интеграции — Scrapy, Crawlee, Robot Framework, CodeceptJS, test runners, Playwright MCP и фреймворки, с которыми он несовместим, поимённо.
Если не знаете, с чего начать: Три способа сделать Playwright недетектируемым — это карта, на которую ссылаются большинство других страниц, Playwright определён как бот на одном сайте — это порядок устранения неполадок, а navigator.webdriver — не тот признак, которым вы его считаете объясняет самое известное свойство в этой области и почему исправление только его даёт почти ничего.
- crawl4ai stealth и пользовательские браузерные движки — browser_type принимает firefox, но нет executable_path; где находится точка интеграции адаптера
- Почему headless-браузеры отображают другие шрифты — три причины, наборы шрифтов по платформам и почему решение — не в установке дополнительных шрифтов
- Как заставить Linux и macOS сообщать реальные шрифты Windows — один манифест, три шрифтовых бэкенда, убеждённые не спрашивать хост, и четыре шва, которые всё ещё открыты
- measureText и TextMetrics как поверхность для снятия отпечатка — более десяти чисел из одного вызова, не требующего запроса разрешения, и две ошибки, которые мы допустили при исправлении
- Что на самом деле делает privacy.resistFingerprinting — и почему этот проект намеренно устанавливает его в false
- Переменная cdc_ в ChromeDriver — почему её переименование не является её удалением и что из этого следует в общем случае
- Что на самом деле проверяет bot.sannysoft.com — построчно, и тест canvas-в-iframe, который никто не читает
- Как CreepJS определяет, что вы лжёте — четыре техники обнаружения и почему блокировка зонда сама по себе фиксируется
- Настройки Firefox, которые молча ничего не делают — пять причин, начиная с той, которая стоила нам реального бага
- Что на самом деле обнаруживает BotD — двадцать детекторов и почему большинство из них вообще не про ботов
- Почему меняется visitor ID в FingerprintJS — это хеш из 41 компонента, поэтому изменение одного меняет всё
Связанные проекты
Соседи с открытым исходным кодом и назначение каждого.
На стороне Firefox
- Camoufox — антидетект-Firefox, который также патчит на уровне C++. Он покрывает более широкую поверхность и поставляет собственную базу отпечатков; этот проект выводит отпечаток из seed с помощью байесовского сэмплера, так что одно число воспроизводит одну машину. Полное сравнение.
- LibreWolf — форк Firefox с настройками приватности по умолчанию. Он поставляет настроенный бинарник для людей, которые хотят браузить; этот поставляет исходные патчи плюс обёртку для автоматизации.
- arkenfox/user.js — усиление Firefox через настройки. Где достаточно настройки, используйте её; этот проект патчит C++ там, где настройки недостаточно.
На стороне Chromium
- Patchright — пропатченный форк Playwright, поэтому стелс-работа ложится на драйвер, а не на бинарник браузера. Полное сравнение.
- nodriver — преемник
undetected-chromedriver, управляющий Chrome напрямую через CDP и устраняющий признаки WebDriver-стиля. Полное сравнение. - playwright-stealth — init-скрипт-патч, применяемый до загрузки страницы. Его собственный мейнтейнер называет это proof-of-concept; полное сравнение.
- puppeteer-extra-plugin-stealth — оригинал этой линии init-скриптов, до сих пор широко рекомендуемый. Последний существенный коммит в его репозитории — с середины 2024 года; что это значит на практике.
- selenium-stealth — тот же подход на Selenium/CDP. Последний коммит в его репозитории — декабрь 2021 года; что это значит на практике.
- pyppeteer — неофициальный Python-порт Puppeteer. Его собственный README говорит, что он не поддерживается, и указывает на
playwright-python; о чём на самом деле эта рекомендация. - rebrowser-patches — исправляет утечку CDP
Runtime.enableв Chromium, независимо сходясь к почти тому же исправлению, что использует Patchright. Полное сравнение. - fingerprint-suite — генерирует согласованный отпечаток с помощью байесовской сети, близко к подходу генерации этого проекта, а затем внедряет его в страницу Playwright или Puppeteer на Chromium или Firefox. Полное сравнение.
- playwright-with-fingerprints — внедряет значения отпечатков из удалённого платного сервиса, только Windows, привязан к конкретной сборке Chromium. Полное сравнение.
Какой из них подходит, зависит от уровня, на котором находится ваша проблема, и от того, нужен ли вам Firefox или Chromium. Три способа сделать Playwright недетектируемым разбирает, чего может и не может достичь каждый уровень, включая цену этого решения.
Если вы выбираете между движками, а не инструментами, учтите, что большая доля фреймворков для AI-агентов управляет Chromium через CDP, что решает вопрос за вас: AI-браузерные агенты и стелс.
Лицензия
MIT — см. LICENSE. Пропатченный бинарник Firefox распространяется под MPL-2.0 (вышестоящая лицензия Firefox). C++-патчи против mozilla-central, из которых получается этот бинарник, находятся в feder-cr/firefox_antidetect_patch.
Отказ от ответственности
Этот проект предназначен только для образовательных целей. Он предоставляется как есть, без каких-либо гарантий. Я не несу ответственности за то, как он используется. Используйте его на свой страх и риск и в соответствии с законами вашей юрисдикции.
Создано Федерико Элиа