
invisible_playwright v0.7.0
Playwright용 무료 안티탐지 브라우저 스텔스: 탐지되지 않는 헤드리스 Firefox 핑거프린트. Python 스크래핑, reCAPTCHA 및 봇 탐지 우회. 오픈 소스
Playwright용 무료 안티탐지 브라우저 스텔스: 탐지되지 않는 Firefox 지문, 헤드리스 또는 헤디드.
Python 웹 스크래핑 및 캡차 우회. 오픈 소스이며, 모든 봇 탐지 테스트를 통과합니다.

작동 방식
안티봇은 두 가지 질문을 하고, reCAPTCHA, hCaptcha 및 Cloudflare Turnstile은 답변에 점수를 매깁니다. invisible_playwright는 두 질문 모두에 "예"라고 답합니다.
1. 이것은 실제 브라우저인가요? 예. C++ 소스 레벨에서 패치된 Firefox입니다.
- 브라우저 지문은 페이지에 주입되는 것이 아니라 엔진 내부에 설정됩니다: navigator, screen, GPU/WebGL, canvas, fonts, audio, WebRTC, timezone, network. 헤드리스든 헤디드든 두 경우 모두 동일한 값입니다.
- JS 심(shim)도, 오버라이드도, 읽을 수 있는 이음새도 없습니다.
2. 실제 사람이 사용하고 있나요? 예. 동작은 드라이버에서 인간화됩니다.
- 모든 클릭, 호버 및 드래그는 순간이동하는 커서 없이 인간적인 타이밍으로 자연스러운 마우스 경로를 따릅니다.
- 각 입력은 실제 마우스와 바이트 단위로 동일합니다: 실제 입력 소스, 압력, 신뢰할 수 있는 이벤트.
표준 Playwright API로 구동됩니다. 전체 분석: feder-cr/firefox_antidetect_patch.
여전히 캡차나 안티봇이 보이나요? 그건 프록시 때문입니다.
브라우저가 처리되면 더 이상 변수가 아닙니다. 여전히 차단을 받고 있다면, 그 신호는 더 이상 브라우저가 아니라 당신이 접속하는 IP입니다. 프록시의 약 90%는 공개되어 있습니다: 누구나 같은 주소를 임대할 수 있으므로 이미 알려져 있고 사이트가 확인하는 차단 IP 목록에 있습니다. 알려진 IP에서 완벽한 브라우저를 사용해도 여전히 패배합니다.
설치
pip install invisible-playwright
python -m invisible_playwright fetch # 일회성 ~238 MB 다운로드 (~544 MB 압축 해제), 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, 오디오, 글꼴, 화면, ~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 메서드가 그대로 작동합니다.
실행을 재현하려면 시드를 기록하세요:
sf = InvisiblePlaywright()
with sf as browser:
print("seed =", sf.seed)
# ...
재현 가능한 지문
with InvisiblePlaywright(seed=42) as browser:
... # 매 실행마다 동일한 GPU, 동일한 canvas 해시, 동일한 오디오 컨텍스트
프록시
proxy = {
"server": "socks5://gate.example.com:1080",
"username": "user",
"password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
...
지원 스킴: socks5, socks4, http, https. DNS는 기본적으로 프록시를 통해 라우팅되며 로컬 누출이 없습니다.
시간대
브라우저 시간대는 timezone=을 따릅니다:
# 기본값: 시간대는 egress IP에서 자동 파생됩니다 (프록시가 설정된 경우 프록시 egress,
# 그렇지 않으면 호스트 자체 공인 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 # 엔진이 없으면 다운로드하고, 캐시된 모든 엔진을
# 실링(seal)과 대조하여 경로를 출력합니다
invisible-playwright version # 래퍼, 코어 및 엔진 버전과 엔진이 캐시된 위치를 출력합니다
문서, 가이드 및 비교
이 모든 것은 위키 에서 더 읽기 쉽고 검색 가능하며, 하나의 평면 목록 대신 네 개의 섹션으로 구성되어 있습니다:
- 문서 - 설치, 일반 Playwright에서 두 줄 전환, 프록시/시간대 구성, 특정 필드 고정, CLI.
- 가이드 - 탐지가 실제로 작동하는 방식, 일곱 그룹으로: 브라우저 정체성, canvas/WebGL/글꼴/오디오, 네트워크 및 WebRTC, 자동화 계층, AI 에이전트, 탐지기 자체를 소스에서 설명, 테스트.
- 비교 - Camoufox, Patchright, nodriver 및 playwright-stealth와의 비교, 그리고 일반적으로 Chromium보다 Firefox를 선택해야 하는 이유.
- 통합 - Scrapy, Crawlee, Robot Framework, CodeceptJS, 테스트 러너, Playwright MCP, 그리고 이름별로 맞지 않는 프레임워크.
어디서 시작해야 할지 모르겠다면: Playwright를 탐지되지 않게 만드는 세 가지 방법은 대부분의 다른 페이지가 다시 연결되는 지도이고, 한 사이트에서 Playwright가 봇으로 탐지됨은 문제 해결 순서이며, navigator.webdriver는 당신이 생각하는 신호가 아닙니다는 이 분야에서 가장 유명한 속성과 그것만 패치하는 것이 거의 아무것도 얻지 못하는 이유를 설명합니다.
- crawl4ai 스텔스 및 사용자 정의 브라우저 엔진 - browser_type은 firefox를 허용하지만 executable_path가 없습니다; 어댑터 이음새가 있는 곳
- 헤드리스 브라우저가 다른 글꼴을 렌더링하는 이유 - 세 가지 원인, 플랫폼별 글꼴 세트, 그리고 수정이 더 많은 글꼴 설치가 아닌 이유
- Linux 및 macOS가 실제 Windows 글꼴을 보고하도록 만드는 방법 - 하나의 매니페스트, 호스트에 묻지 않도록 설득된 세 가지 글꼴 백엔드, 여전히 열려 있는 네 개의 이음새
- 지문 표면으로서의 measureText 및 TextMetrics - 권한 프롬프트가 필요 없는 한 번의 호출에서 나오는 10개 이상의 숫자, 그리고 이를 수정하면서 저지른 두 가지 실수
- privacy.resistFingerprinting이 실제로 하는 일 - 그리고 이 프로젝트가 의도적으로 false로 설정하는 이유
- ChromeDriver cdc_ 변수 - 이름을 바꾸는 것이 제거가 아닌 이유, 그리고 그것이 일반화되는 것
- bot.sannysoft.com이 실제로 확인하는 것 - 행별로, 그리고 아무도 읽지 않는 canvas-in-iframe 테스트
- CreepJS가 당신이 거짓말한다고 판단하는 방식 - 네 가지 탐지 기술, 그리고 프로브 차단 자체가 기록되는 이유
- 조용히 아무것도 하지 않는 Firefox 기본 설정 - 실제 버그를 초래한 것부터 시작하는 다섯 가지 이유
- BotD가 실제로 탐지하는 것 - 스무 개의 탐지기, 그리고 대부분이 봇에 관한 것이 아닌 이유
- FingerprintJS 방문자 ID가 변경되는 이유 - 41개 구성 요소의 해시이므로 하나가 움직이면 모두 움직입니다
관련 프로젝트
오픈 소스 이웃 프로젝트와 각각의 용도입니다.
Firefox 측
- Camoufox - C++ 레벨에서도 패치하는 안티탐지 Firefox입니다. 더 넓은 표면을 다루고 자체 지문 데이터베이스를 제공합니다; 이 프로젝트는 베이지안 샘플러로 시드에서 지문을 파생하므로 하나의 숫자가 하나의 머신을 재현합니다. 전체 비교.
- LibreWolf - 개인정보 보호 기본값을 가진 Firefox 포크입니다. 사람들이 탐색할 수 있도록 구성된 바이너리를 제공합니다; 이 프로젝트는 소스 패치와 자동화 래퍼를 제공합니다.
- arkenfox/user.js - 기본 설정을 통한 Firefox 강화입니다. 기본 설정으로 충분한 곳에서는 그것을 사용하세요; 이 프로젝트는 충분하지 않은 곳에서 C++를 패치합니다.
Chromium 측
- Patchright - 패치된 Playwright 포크이므로 스텔스 작업이 브라우저 바이너리보다는 드라이버에 들어갑니다. 전체 비교.
- nodriver -
undetected-chromedriver의 후속작으로, CDP를 통해 Chrome을 직접 구동하고 WebDriver 특유의 신호를 제거합니다. 전체 비교. - playwright-stealth - 페이지 로드 전에 적용되는 init-script 패치입니다. 자체 유지보수자가 이를 개념 증명이라고 부릅니다; 전체 비교.
- puppeteer-extra-plugin-stealth - 이 init-script 계열의 원조로, 여전히 널리 권장됩니다. 저장소의 마지막 실질적 커밋은 2024년 중반입니다; 그것이 실제로 의미하는 것.
- selenium-stealth - Selenium/CDP에서 동일한 접근 방식입니다. 저장소의 마지막 커밋은 2021년 12월입니다; 그것이 실제로 의미하는 것.
- pyppeteer - Puppeteer의 비공식 Python 포트입니다. 자체 README에서 유지보수되지 않는다고 말하고
playwright-python을 가리킵니다; 그 권장 사항이 실제로 무엇에 관한 것인지. - rebrowser-patches - Chromium에서
Runtime.enableCDP 누출을 수정하며, Patchright가 사용하는 것과 거의 동일한 수정으로 독립적으로 수렴합니다. 전체 비교. - fingerprint-suite - 베이지안 네트워크로 일관된 지문을 생성하며, 이 프로젝트의 자체 생성 방식과 유사한 다음 Chromium 또는 Firefox에서 Playwright 또는 Puppeteer 페이지에 주입합니다. 전체 비교.
- playwright-with-fingerprints - 원격 유료 서비스에서 가져온 지문 값을 주입하며, Windows 전용이고 특정 Chromium 빌드에 고정되어 있습니다. 전체 비교.
이 중 어떤 것이 맞는지는 문제가 있는 계층과 Firefox 또는 Chromium이 필요한지에 따라 다릅니다. Playwright를 탐지되지 않게 만드는 세 가지 방법은 각 계층이 도달할 수 있는 것과 도달할 수 없는 것을 포함하여 이 프로젝트의 비용까지 설명합니다.
도구보다는 엔진을 선택하는 경우, 많은 AI 에이전트 프레임워크가 CDP를 통해 Chromium을 구동한다는 점에 유의하세요. 이는 질문을 스스로 결정합니다: AI 브라우저 에이전트와 스텔스.
라이선스
MIT - LICENSE 참조. 패치된 Firefox 바이너리는 MPL-2.0(Firefox 업스트림 라이선스)에 따라 배포됩니다. 해당 바이너리를 생성하는 mozilla-central에 대한 C++ 패치는 feder-cr/firefox_antidetect_patch에 있습니다.
면책 조항
이 프로젝트는 교육 목적으로만 제공됩니다. 어떠한 보증도 없이 있는 그대로 제공됩니다. 사용 방법에 대해 책임을 지지 않습니다. 사용에 따른 위험은 스스로 감수하며 관할 지역의 법률을 준수하십시오.
Built by Federico Elia