업데이트로 돌아가기
New releaseAug 14, 2026

invisible_playwright v0.7.0

Playwright용 무료 안티탐지 브라우저 스텔스: 탐지되지 않는 헤드리스 Firefox 핑거프린트. Python 스크래핑, reCAPTCHA 및 봇 탐지 우회. 오픈 소스

공유
invisible_playwright

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

invisible_playwright - 5/5 detection suites passed

작동 방식

안티봇은 두 가지 질문을 하고, 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는 당신이 생각하는 신호가 아닙니다는 이 분야에서 가장 유명한 속성과 그것만 패치하는 것이 거의 아무것도 얻지 못하는 이유를 설명합니다.

관련 프로젝트

오픈 소스 이웃 프로젝트와 각각의 용도입니다.

Firefox 측

  • Camoufox - C++ 레벨에서도 패치하는 안티탐지 Firefox입니다. 더 넓은 표면을 다루고 자체 지문 데이터베이스를 제공합니다; 이 프로젝트는 베이지안 샘플러로 시드에서 지문을 파생하므로 하나의 숫자가 하나의 머신을 재현합니다. 전체 비교.
  • LibreWolf - 개인정보 보호 기본값을 가진 Firefox 포크입니다. 사람들이 탐색할 수 있도록 구성된 바이너리를 제공합니다; 이 프로젝트는 소스 패치와 자동화 래퍼를 제공합니다.
  • arkenfox/user.js - 기본 설정을 통한 Firefox 강화입니다. 기본 설정으로 충분한 곳에서는 그것을 사용하세요; 이 프로젝트는 충분하지 않은 곳에서 C++를 패치합니다.

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  LinkedIn

tests License: MIT Python 3.11+ Firefox 151.0 GitHub stars

카테고리