탐지되지 않는 Patchright (Playwright 포크), 설치부터 우회 검증까지

2026년 6월 25일
조회수 10
코멘트0

목차

patchright 탐지되지 않는 Playwright 포크

웹 자동화를 하다 보면 같은 코드인데 어떤 사이트에서는 멀쩡히 돌고, 어떤 사이트에서는 곧바로 차단당하는 경험을 하게 됩니다. 원인의 상당 부분은 Playwright 같은 자동화 도구가 남기는 흔적입니다. patchright는 바로 그 흔적을 제거한 Playwright 포크로, 기존 코드를 거의 그대로 둔 채 탐지 회피력을 끌어올립니다. 이 글은 patchright를 직접 설치해 일반 Playwright와 비교 측정한 결과를 정리한 것입니다.

patchright란?

patchright는 "탐지되지 않는(undetected) Playwright"를 표방하는 오픈소스 포크입니다(Python·Node 버전 제공). API가 Playwright와 동일해 import 경로만 바꾸면 되는 드롭인 교체가 핵심입니다. 내부적으로는 Playwright가 봇 탐지에 걸리는 지점들을 소스 레벨에서 손봤습니다. 단, Chromium 계열만 지원하며 Firefox·WebKit은 대상이 아닙니다.

핵심 특징

patchright 핵심 특징
  • CDP 누수 패치Runtime.enable을 쓰지 않고 격리된 ExecutionContext에서 스크립트를 실행해, CDP 기반 탐지를 회피합니다.
  • 탐지 플래그 제거--enable-automation을 빼고 --disable-blink-features=AutomationControlled를 더해 navigator.webdriver 노출을 막습니다.
  • Closed Shadow DOM 접근 — 닫힌 Shadow Root 안의 요소도 일반 로케이터·XPath로 다룰 수 있습니다.
  • 드롭인 호환 — 기존 Playwright 스크립트를 거의 수정 없이 재사용합니다.

실측 — 설치부터 탐지 비교까지

설치는 패키지 한 줄과 Chromium 다운로드로 끝납니다.

pip install patchright
patchright install chromium

핵심 차이를 보기 위해 같은 헤드리스 Chromium에서 patchright와 playwright의 navigator.webdriver을 동일하게 측정했습니다.

# patchright는 import 경로만 다릅니다 (API 동일)
from patchright.sync_api import sync_playwright   # vs playwright.sync_api

with sync_playwright() as p:
    b = p.chromium.launch(headless=True)
    pg = b.new_page(); pg.goto("about:blank")
    print(pg.evaluate("() => navigator.webdriver"))
    b.close()
patchright vs playwright navigator.webdriver 실측 비교
측정 항목 patchright 1.60.1 playwright 1.60.0
navigator.webdriverfalse (정상 브라우저처럼) true (자동화 노출)
UA에 HeadlessChrome 포함 예 (헤드리스 셸 사용 시)
example.com 접속 200 OK · "Example Domain" · 168ms

결과는 분명합니다. 일반 Playwright는 navigator.webdrivertrue로 노출돼 가장 기본적인 탐지에 바로 걸리지만, patchright는 false로 일반 브라우저처럼 보입니다. 실제 페이지 접속(example.com)도 200 OK에 168ms로 문제없이 동작했습니다.

언제 쓰고, 무엇을 주의할까

patchright는 봇 차단이 강한 사이트를 정당한 목적으로 다룰 때 유용합니다. 다만 만능은 아닙니다. Chromium 전용이라는 제약이 있고, 위처럼 실행 방식에 따라 다른 흔적이 남을 수 있습니다. 무엇보다 대상 사이트의 robots.txt와 이용약관을 존중하고, 인증·결제·민감 정보가 걸린 페이지는 자동화 대상에서 제외하는 것이 기본입니다. 기술적 회피력과 별개로, 합법적이고 허용된 범위 안에서 쓰는 것이 핵심입니다.

기존 Playwright 코드, 어떻게 옮기나

마이그레이션 비용이 낮다는 점이 patchright의 가장 큰 장점입니다. 대부분의 경우 import 경로 한 줄만 바꾸면 됩니다. 동기·비동기 API 모두 Playwright와 시그니처가 같습니다.

# Before (일반 Playwright)
from playwright.sync_api import sync_playwright

# After (patchright) — 나머지 코드는 그대로
from patchright.sync_api import sync_playwright

비동기를 쓴다면 from patchright.async_api import async_playwright로 바꾸면 됩니다. 브라우저 설치도 patchright install chromium으로 전용 명령을 제공하므로 기존 Playwright 환경과 충돌 없이 분리해 둘 수 있습니다. 실전 스텔스를 높이려면 실행부에서 p.chromium.launch(channel="chrome", headless=False)처럼 실제 Chrome 채널과 headed 모드를 함께 쓰는 것을 권장합니다.

실전 — 쿠팡 검색·상품 접속 테스트

봇 차단이 강한 사이트에서 진짜 차이가 드러납니다. 쿠팡은 Akamai 기반 보호가 걸려 있어, 일반 도구의 요청은 robots.txt조차 "Access Denied"로 막힙니다. 그래서 완전히 동일한 구성(실제 Chrome 채널 · headed · ko-KR)으로 patchright와 playwright에 같은 검색을 시켜 비교했습니다. 검색어는 "무선마우스" 하나, 단일 저빈도 요청입니다.

쿠팡 검색 patchright vs playwright 실측 비교
ctx = p.chromium.launch_persistent_context(
    user_data_dir="/tmp/profile",
    channel="chrome", headless=False, no_viewport=True,
    locale="ko-KR", timezone_id="Asia/Seoul",
)
pg = ctx.pages[0]
pg.goto("https://www.coupang.com/np/search?q=무선마우스", wait_until="domcontentloaded")
항목 patchright playwright
검색 페이지 정상 로드 (차단 없음) Access Denied (Akamai 차단)
검색된 상품 수 309개0개
navigator.webdriverfalse true
상품 페이지 접속 성공 ("…무선마우스 | 쿠팡")

같은 코드, 같은 브라우저, 같은 옵션인데 결과는 정반대였습니다. playwright는 검색 페이지부터 Access Denied로 막혔고, patchright는 상품 309개를 정상 로드한 뒤 상품 상세 페이지까지 들어갔습니다. 차단의 핵심 신호 중 하나가 바로 navigator.webdriver 노출이며, patchright는 이 지점을 가려 통과한 것입니다. 다만 이런 테스트는 반드시 저빈도 단일 요청으로, 대상 사이트의 이용약관과 robots 정책을 존중하는 범위에서만 수행해야 합니다.

한계 — 네이버 쇼핑은 둘 다 막혔다

그렇다고 patchright가 만능은 아닙니다. 완전히 같은 방식으로 네이버 쇼핑 검색을 시도하자, patchright와 playwright 모두 검색 결과 대신 "NAVER 보안 확인" 페이지(영수증 이미지를 읽어 값을 입력하는 캡차, HTTP 405)로 막혔습니다.

네이버 쇼핑 patchright vs playwright 실측 — 둘 다 보안 확인 차단
항목 patchright playwright
검색 페이지 보안 확인(캡차) 차단 · HTTP 405 보안 확인(캡차) 차단 · HTTP 405
검색된 상품 수 0개 0개
navigator.webdriverfalse true

쿠팡과는 정반대 결과입니다. 쿠팡의 보호는 navigator.webdriver 같은 신호 위주라 patchright가 통과했지만, 네이버 쇼핑은 행동·환경·캡차 등 추가 신호를 함께 검사하기 때문에 navigator.webdriver를 가린 patchright도 걸렸습니다. 정리하면 patchright는 탐지 표면을 크게 줄여 주는 강력한 도구이지만, 사이트마다 방어 수준이 달라 "한 번에 모든 곳을 뚫는" 만능 열쇠는 아닙니다. 특히 캡차를 만나면 자동 우회가 아니라 정식 API·제휴 같은 합법적 경로로 전환하는 것이 옳습니다.

참조 링크

조회 통계 (최근 30일)
PV 10UV 10
이 글이 도움이 되셨나요? 의견을 들려주세요!
지금까지 0명이 의견을 남겼어요
아직 댓글이 없어요. 첫 댓글을 남겨보세요!