
invisible_playwright v0.20.0
Playwright를 anti-bot이 감지할 수 없게 만들어 캡차가 필요 없습니다: 동일한 API, 안티 디텍트 스텔스 헤드리스 Firefox, 감지되지 않는 핑거프린트, 봇 탐지 우회, Python 웹 스크래핑 및 브라우저 자동화.
Playwright는 안티봇과 캡차에 걸립니다.
이 도구는 감지되지 않는 지문을 가진 안티 디텍트 Firefox에서 실행되며, 기존 Playwright 코드와 호환됩니다.

작동 방식
안티봇은 두 가지 질문을 던지고, reCAPTCHA, hCaptcha, Cloudflare Turnstile이 그 답변을 채점합니다. invisible_playwright는 두 질문 모두에 "예"라고 답합니다.
1. 이것은 실제 브라우저인가? 그렇습니다. C++ 소스 레벨에서 패치된 Firefox입니다.
- 브라우저 지문은 페이지에 주입되는 것이 아니라 엔진 내부에서 설정됩니다: navigator, screen, GPU/WebGL, canvas, 폰트, 오디오, WebRTC, 타임존, 네트워크. 헤드리스든 헤디드든 값은 동일합니다.
- JS shim도, 오버라이드도, 읽힐 만한 이음새도 없습니다.
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.
사용법
세션마다 무작위 지문
코드 변경 없이 Playwright의 API, 동기 및 비동기. 동일한 객체, 동일한 호출, 동일한 반환 값. 일부 영역은 범위 밖입니다 - tracing, HAR, CDP, API request context - 그리고 각각은 조용히 오작동하는 대신 이유를 설명하는 문장과 함께 거부합니다. 이미 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 메서드가 그대로 작동합니다.
실행을 재현하려면 시드를 기록하세요:
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에서 나옵니다. 나머지는 시드에서 파생된 상태로 두고 특정 값을 강제하려면:
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, 자세한 내용은
the MCP server page; 또는
인터페이스와 모델이 포함되어 OpenRouter 키만 있으면 되는
uvx aihawk ui --openrouter-key sk-or-..., 자세한 내용은
AIHawk. 내부 엔진은 동일하며, 두 번째는
첫 번째의 클라이언트입니다.
이 모든 내용은 **the wiki**에서 더 잘 읽히고 검색 가능하며, 하나의 평면적인 목록 대신 네 개의 섹션으로 구성되어 있습니다:
- Documentation - 설치, 일반 Playwright에서의 두 줄 전환, 프록시/타임존 구성, 특정 필드 고정, CLI.
- Guides - 탐지가 실제로 어떻게 작동하는지, 일곱 그룹으로: 브라우저 아이덴티티, canvas/WebGL/폰트/ 오디오, 네트워크와 WebRTC, 자동화 계층, AI 에이전트, 소스에서 설명하는 탐지기 자체, 그리고 테스트.
- Comparisons - Camoufox, Patchright, nodriver, playwright-stealth와의 비교, 그리고 일반적으로 Chromium보다 Firefox를 선택하는 이유.
- Integrations - Scrapy, Crawlee, Robot Framework, CodeceptJS, 테스트 러너, Playwright MCP, 그리고 맞지 않는 프레임워크를 이름으로 명시.
어디서 시작해야 할지 모르겠다면: Three ways to make Playwright undetected가 다른 대부분의 페이지가 다시 링크하는 지도이고, Playwright detected as a bot on one site는 문제 해결 순서이며, navigator.webdriver is not the tell you think it is는 이 분야에서 가장 유명한 속성과 그것만 패치하는 것이 왜 거의 도움이 되지 않는지 설명합니다.
탐지기 섹션은 이제 상용 안티봇 제품을 이름으로 다루며, 각각 자체 문서나 확인된 리버스 엔지니어링에서 읽어냅니다: Cloudflare Bot Management와 Turnstile, DataDome, Kasada, Akamai Bot Manager, PerimeterX, hCaptcha, Imperva, 그리고 나머지 세트.
관련 프로젝트
이 프로젝트의 다른 조각들. 엔진은 셋 중 가운데에 있고, 그 주위의 둘은 대부분의 사람들이 엔진에 도달하는 방법입니다: