puppeteer-extra-stealth는 구식입니다: 2026년 자동화가 대신 사용하는 도구 — Clawbrowser 기사 커버 이미지

puppeteer-extra-stealth는 구식입니다: 2026년 자동화가 대신 사용하는 도구

Clawbrowser Team브라우저 자동화puppeteerplaywright안티봇가이드

puppeteer-extra-plugin-stealth는 Puppeteer용 안티디텍트 패키지 중 가장 널리 사용됩니다. npm에서 여전히 주간 600K 이상의 다운로드를 기록하고 있습니다. 하지만 마지막 업데이트는 2023년 3월에 멈췄습니다. 최신 버전은 v2.11.2이며, 이 상태로 유지될 것입니다. 유지보수가 중단되었고, GitHub 이슈는 쌓여가고, 안티봇 시스템은 이미 다음 단계로 넘어갔습니다.

요약: 스텔스 플러그인은 페이지 수준의 JavaScript 오버라이드로 탐지 신호를 패치합니다. 2026년 현재 Cloudflare, Akamai, DataDome 같은 안티봇 시스템은 JavaScript가 도달할 수 없는 신호를 검사합니다. TLS 핑거프린트, CDP 프로토콜 아티팩트, 엔진 수준의 렌더링 차이입니다. 해결책은 더 나은 플러그인이 아닙니다. 다른 레이어에서의 대응이 필요합니다. 프로토콜 유출을 숨기는 패치드 드라이버이거나, 핑거프린트를 엔진 수준에서 처리하는 패치드 브라우저입니다.


스텔스 플러그인이 실제로 하는 일

puppeteer-extra-plugin-stealth는 evaluateOnNewDocument를 통해 실행되는 11개의 회피 모듈을 번들링합니다. 각 모듈은 하나의 탐지 표면을 패치합니다.

Module 패치 대상
webdriver navigator.webdriver = true 제거
chrome.runtime chrome.runtime 객체 위장
chrome.csi / chrome.app 누락된 Chrome API 스텁 추가
navigator.plugins 플러그인 배열 스푸핑
navigator.languages 언어 설정 오버라이드
navigator.permissions 권한 쿼리 동작 수정
media.codecs 코덱 지원 스푸핑
sourceurl 주입된 스크립트에서 //# sourceURL 은닉
iframe.contentWindow 교차 출처 iframe 탐지 수정
webgl.vendor WebGL 벤더/렌더러 문자열 스푸핑
user-agent-override 실제와 유사한 User-Agent 헤더 설정

이 패치들은 안티봇 시스템이 주로 페이지 수준의 JavaScript 속성을 검사하던 2021~2022년에는 효과가 있었습니다. 현대의 탐지 시스템이 실제로 검사하는 항목에는 통하지 않습니다.

2026년에 스텔스 플러그인이 실패하는 이유

안티봇 탐지는 JavaScript 레이어 아래로 이동했습니다. 현재 중요한 신호는 evaluateOnNewDocument가 도달할 수 없는 것들입니다.

CDP 프로토콜 유출

Puppeteer가 Chrome에 연결되면 Runtime.enable, Page.enable, Network.enable 같은 CDP 명령을 전송합니다. 이 명령들은 브라우저 내부 상태에 아티팩트를 남기며, 안티봇 스크립트가 이를 탐지할 수 있습니다. 스텔스 플러그인은 페이지 수준에서 작동하므로 프로토콜 수준의 CDP는 건드리지 못합니다.

Runtime.enable 명령 하나만으로도 자동화 세션의 핑거프린트를 만들 수 있습니다. 페이지 수준에서 아무리 패치해도 CDP 명령이 발행되었다는 사실을 숨길 수 없습니다.

TLS 핑거프린팅

Cloudflare는 HTML을 제공하기 전에 TLS 핑거프린트(JA3/JA4)를 검사합니다. TLS 핑거프린트가 올바르지 않으면 스텔스 플러그인의 JavaScript 패치가 로드되기도 전에 세션이 차단되거나 인증 요구를 받습니다. 플러그인은 페이지 수준에서 작동하므로 TLS 레이어에 접근할 방법이 없습니다. TLS 핑거프린팅이 탐지 스택에서 어떻게 작동하는지에 대한 자세한 설명은 차단 없는 브라우저 자동화의 네트워크 레이어 섹션을 참조하세요.

JavaScript 오버라이드 탐지

안티봇 스크립트는 navigator.webdriver의 값만 검사하지 않습니다. 프로퍼티 디스크립터도 검사합니다. 실제 브라우저에서 webdriver는 Navigator 프로토타입의 네이티브 getter로 정의되어 있습니다. 스텔스 플러그인은 Object.defineProperty로 오버라이드하므로 디스크립터의 configurable 플래그와 getter 함수의 toString() 출력이 달라집니다. 탐지 스크립트는 이러한 불일치를 테스트합니다.

다른 오버라이드에도 동일한 문제가 적용됩니다. chrome.runtime, 플러그인 배열, 권한 쿼리는 네이티브 구현이 JavaScript 스텁으로 교체되면 탐지 가능한 차이를 갖게 됩니다.

헤드리스 렌더링 차이

--headless=new(최신 헤드리스 모드)를 사용해도 Chrome은 headed Chrome과 미세하게 다르게 렌더링합니다. 글꼴 메트릭, GPU 가속 Canvas 출력, 화면 크기 API가 모두 다릅니다. 스텔스 플러그인은 일부 navigator 속성을 패치하지만, 렌더링 엔진 자체의 동작을 변경할 수는 없습니다.


스텔스 플러그인을 대체한 것들

생태계는 두 가지 접근 방식으로 나뉘었습니다. 패치드 드라이버(프로토콜 레이어 수정)와 패치드 브라우저(엔진 레이어 수정)입니다. 각각 다른 문제를 해결합니다.

패치드 드라이버: Rebrowser와 Patchright

Rebrowser는 Puppeteer와 Playwright의 드롭인 대체품을 제공합니다(rebrowser-puppeteer, rebrowser-playwright). 패치는 CDP 프로토콜 아티팩트를 대상으로 합니다. Runtime.enable 및 기타 명령이 브라우저와 상호작용하는 방식을 수정하여 탐지 가능한 흔적을 남기지 않도록 합니다. 코드에서 패키지 이름만 교체하면 나머지는 동일합니다.

// Before: detected
const puppeteer = require('puppeteer');

// After: CDP artifacts patched
const puppeteer = require('rebrowser-puppeteer');

Patchright는 Playwright용으로 동일한 역할을 하며 Python에 중점을 둡니다. Runtime.enable 유출을 패치하며 활발하게 유지보수되고 있습니다.

한계: 패치드 드라이버는 프로토콜 탐지를 수정하지만 브라우저 핑거프린팅은 해결하지 못합니다. 사이트가 Canvas, WebGL, AudioContext, 글꼴 렌더링을 검사하면 여전히 노출됩니다. 패치드 드라이버는 "자동화인가?"라는 질문에는 대응하지만, "실제 기기인가?"라는 질문에는 대응하지 못합니다.

패치드 브라우저: 안티디텍트 엔진

패치드 브라우저는 Chromium 자체를 수정하여 핑거프린트 신호가 엔진 수준에서 일관되도록 합니다. Canvas 출력, WebGL 렌더링, AudioContext 데이터, 글꼴 메트릭, 화면 크기, 시간대, 로케일이 모두 하나의 실제 기기 프로필과 일치하는 값을 보고합니다.

이것이 Clawbrowser가 하는 일입니다. 20개 이상의 표면에 걸친 엔진 수준의 핑거프린트 패치, 내장 프록시 라우팅, WebRTC 유출 방지, 네이티브 CDP 지원을 갖춘 Chromium 포크입니다. 기존 Puppeteer 또는 Playwright 코드가 CDP를 통해 연결됩니다.

from playwright.async_api import async_playwright

async def automate_without_detection():
    async with async_playwright() as p:
        # Connect to Clawbrowser instead of stock Chrome

스텔스 플러그인이 처리하지 못하는 것을 Clawbrowser가 처리하는 항목:

  • 엔진 수준의 Canvas/WebGL/AudioContext 일관성(JavaScript 스텁이 아님)
  • 실제 Chrome 세션과 일치하는 TLS 핑거프린트
  • Runtime.enable 아티팩트 없는 CDP 연결
  • 브라우저 수준의 WebRTC 유출 방지
  • 지리적 정합성을 갖춘 내장 프록시 라우팅

핑거프린팅 대상의 전체 분석은 브라우저 핑거프린트 설명: 안티봇 시스템이 사용하는 20개 이상의 신호를 참조하세요.


선택 방법

적합한 도구는 무엇이 탐지하고 있는지에 따라 달라집니다.

탐지 유형 증상 해결 방법
CDP 프로토콜 아티팩트 페이지 로드 직후 차단, CAPTCHA 없음 패치드 드라이버(Rebrowser, Patchright)
브라우저 핑거프린트 불일치 모든 페이지에서 CAPTCHA 또는 무음 데이터 차이 패치드 브라우저(Clawbrowser)
TLS 핑거프린트 불일치 페이지 로드 전 차단(첫 요청에서 403) 프록시 라우팅 포함 패치드 브라우저
IP 평판 데이터센터 IP에서 차단 주거용 프록시(모든 접근 방식)
행동 탐지 5~10페이지 후 차단 코드 내 타이밍과 세션 관리

패치드 드라이버로 충분한 경우

CDP 아티팩트를 검사하지만 브라우저 핑거프린트를 깊이 분석하지 않는 기본적인 탐지 시스템의 사이트를 자동화할 때, Rebrowser 또는 Patchright로 충분합니다. 가벼운 안티봇 설정의 사이트 대부분이 여기에 해당합니다.

패치드 브라우저가 필요한 경우

사이트가 Cloudflare Bot Management, Akamai Bot Manager, DataDome, PerimeterX를 사용하는 경우 엔진 수준의 핑거프린트 일관성이 필요합니다. 탐지 시스템이 20개 이상의 브라우저 표면을 동시에 검사할 때, 페이지 수준이나 드라이버 수준의 패치로는 부족합니다.

Clawbrowser는 로컬에서 실행되는 무료 Chromium 기반 안티디텍트 브라우저입니다. 관리형 핑거프린트, 프록시 라우팅, 네이티브 CDP, 내장 MCP 서버를 갖추고 있습니다. 브라우저 ID와 네트워크 레이어를 처리하므로 코드에서는 행동과 세션 관리에만 집중할 수 있습니다.


스텔스 플러그인에서 마이그레이션

현재 puppeteer-extra-plugin-stealth 또는 playwright-stealth를 사용하고 있다면 Clawbrowser로의 전환은 5분 이내에 완료됩니다.

Before(스텔스 플러그인)

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());

const browser = await puppeteer.launch({ headless: false });

After(Clawbrowser)

const puppeteer = require('puppeteer-core');

// Connect to Clawbrowser over CDP
const browser = await puppeteer.connect({
    browserWSEndpoint: 'ws://127.0.0.1:9222'

핵심적인 차이점은 puppeteer-extra와 puppeteer-extra-plugin-stealth를 의존성에서 완전히 제거하는 것입니다. 플러그인 구성이 필요 없습니다. 회피 모듈 선택이 필요 없습니다. 안티디텍션은 코드가 아닌 브라우저 수준에서 이루어집니다.

스크래핑 관련 패턴(페이지네이션, 세션 워밍, Cloudflare 우회)에 대해서는 탐지 없는 웹 스크래핑을 참조하세요.


FAQ

puppeteer-extra-stealth는 완전히 쓸모없나요?

상업용 안티봇 시스템이 없는 사이트에서는 여전히 작동합니다. 대상 사이트가 navigator.webdriver와 기본 JavaScript 속성만 검사한다면 스텔스 플러그인으로 충분합니다. 다만 Cloudflare, Akamai, DataDome, PerimeterX를 사용하는 사이트나 Facebook, Instagram, LinkedIn, X 같은 소셜 미디어 플랫폼에서는 탐지됩니다.

playwright-stealth도 같은 문제가 있나요?

네. playwright-stealth도 동일한 접근 방식을 사용합니다. 페이지 수준 주입을 통한 JavaScript 오버라이드입니다. TLS 핑거프린트, CDP 아티팩트, 엔진 수준 렌더링에 도달할 수 없습니다. 탐지에 대한 한계는 동일합니다.

Rebrowser와 Clawbrowser를 함께 사용할 수 있나요?

그럴 필요가 없습니다. Clawbrowser는 프로토콜 레이어와 핑거프린트 레이어를 모두 처리합니다. Rebrowser 패치는 기본 Chrome을 사용하면서 안티디텍트 브라우저로 전환할 수 없는 경우에 유용합니다. Clawbrowser를 사용하고 있다면 CDP 아티팩트는 이미 처리되고 있습니다.

stealth가 여전히 주간 600K 다운로드를 기록하는 이유는 무엇인가요?

관성입니다. 대부분의 튜토리얼과 Stack Overflow 답변이 여전히 이 패키지를 추천합니다. 개발자들은 패키지가 아직 유지보수되고 있는지 확인하지 않고 2022년에 작동했던 솔루션을 복사하여 붙여넣습니다. 높은 다운로드 수가 최신 탐지에 대해 효과적이라는 의미는 아닙니다.


패치를 멈추고, 근본을 해결하세요

스텔스 플러그인은 안티봇 탐지가 JavaScript 수준의 검사에 의존하던 시대에 합리적인 해결책이었습니다. 탐지는 TLS 핑거프린트, CDP 프로토콜 분석, 엔진 수준 렌더링 차이로 이동했습니다. 페이지 수준 패치로는 이런 신호에 도달할 수 없습니다.

Clawbrowser를 설치하여 브라우저 수준에서 탐지에 대응하세요. clawbrowser.ai에서 설치 프롬프트를 복사하여 AI 에이전트에 붙여넣으세요. puppeteer-extra와 puppeteer-extra-plugin-stealth를 의존성에서 제거하세요. 기존 Puppeteer 또는 Playwright 코드를 CDP를 통해 연결하세요. 안티디텍션은 코드가 아닌 브라우저 안에 있습니다.

탐지 모델의 기초에 대해서는 차단 없는 브라우저 자동화: 4계층 방어 스택을 참조하세요.

Continue exploring

Ask AI how Clawbrowser helps

계속 읽기

모든 글 보기 →