Playwright 스크립트가 지난 주 일 동안 작동하고 이제 Cloudflare의 도전 페이지를 타격하거나 HTTP 403을 돌려 error 1020 — 문제는 거의 결코 당신의 코드가 아닙니다. 문제는 브라우저가 신호의 더미를 통해 자동화로 식별된다는 것입니다. 방출을 알 수 없습니다.
이 가이드는 Playwright 스크립트가 Cloudflare에 의해 차단되는 이유를 설명합니다. 특히 Cloudflare는 읽기이며, 실제로 생산중인 방식에 의해 평가 된 4 가지 클래스. TL; DR : 페이지 레벨 패치는 몇 주를 구입합니다. 브라우저 버전 수준의 일관성은 내구성이 뛰어납니다.
왜 Playwright Triggers Cloudflare 봇 탐지
기본적으로 Playwright-driven Chromium 브라우저가 Cloudflare의 봇 관리 시스템이 자동화로 인식하도록 훈련 된 신호의 일관성 세트를 방출하기 때문에 Cloudflare 블록 Playwright 세션. 블록은 무작위가 아니며 혼자 비율 제한을 기반으로하지 않습니다. 그것은 페이지와 함께 첫 번째 상호 작용하기 전에 발생하는 ID 분류에 근거합니다.
Cloudflare-protected 페이지로드의 첫 번째 200 밀리 초는 코드가 작동하기 전에 실행되는 지문 및 행동 검사의 스택을 통합합니다. 시간이 지나면 page.goto() 해결, 세션은 종종 이미 분류됩니다.
왜 이 시간이 더 나빠지
Cloudflare의 봇 관리는 지속적으로 탐지 모델을 업데이트합니다. 에 따르면 Cloudflare의 봇 관리 문서, 시스템은 기계 학습을 사용하여 트래픽 패턴을 수백만의 사이트에서 훈련 - 서명을 의미하는 훔친 설정은 오늘 benign 될 수있다, 하지만 서명은 다음 달을 방출 할 수 있습니다 때문에 Cloudflare의 모델이 업데이트. 이것은 왜 "그것은 작동 중지"는 Playwright + Cloudflare 디버깅 스레드에서 가장 일반적인 패턴입니다.
6 신호 Cloudflare는 Playwright에서 읽습니다.
Playwright의 Cloudflare 문제를 해결하려면 Cloudflare가 실제로 검사하는 것을 알아야합니다. 6 개의 고착 신호가 있습니다.
1. 더 navigator.webdriver (주)
가장 기본적인 신호. 바닐라 Playwright 통제되는 Chromium 세트 navigator.webdriver = true. 검출 시스템은 첫 번째 스크립트 실행에 이것을 읽습니다. 대부분의 스텔스 플러그인은 이것을 처리하지만 일부 패치는 스스로 탐지 할 수 있습니다.
2. TLS 지문 (JA3/JA4)
Playwright의 underlying Chromium은 TLS Client Hello를 특정 주문, 확장 목록 및 elliptic 곡선 세트로 생산합니다. 이 양식은 JA3 또는 JA4 해시 그 Cloudflare는 알려진 자동화 클라이언트 서명과 일치 할 수 있습니다. As Salesforce의 오픈 소스 JA3 사양 설명, TLS handhake 자체는 사용자 에이전트의 지문 독립적입니다.
3. HTTP/2 구조 주문
브라우저가 HTTP/2 SETTINGS, WINDOW_UPDATE를 보내고, HEADERS 프레임은 Chrome 버전 내에서 일관성이 있지만, HTTP/2를 다르게 구축하는 자동화 라이브러리와 다릅니다. Cloudflare는이 레이어를 읽습니다.
4. 화포, WebGL 및 오디오 지문
페이지가 Cloudflare 도전 JavaScript를 실행하면 캔버스와 WebGL 컨텍스트에 대한 테스트 콘텐츠를 렌더링하고 픽셀 데이터를 다시 읽습니다. 주식 Playwright Chromium은 세분화, 반복 가능한 readbacks를 생산합니다. 수천 세션에서 동일한 readback은 봇 신호입니다.
5. Timezone × 로컬 × IP 지력
브라우저가 존재하는 경우 en-US 으로 America/New_York 프랑크푸르트 데이터 센터를 통해 IP 경로가 잠시 동안, mismatch는 가까운 봇 신호입니다. Cloudflare는 세 가지를 교차합니다.
6. 페이지 짐 후에 행동 신호
도전이 지문 단계를 통과하면 행동 검사가 시작됩니다 : 마우스 운동 entropy, 스크롤 패턴, 키 입력 cadence. 순수한 프로그래밍 상호 작용 (정확한 좌표에서 즉시 클릭)은 여기에서 탐지 할 수 있습니다.
수정의 4 종류, 등급
Playwright + Cloudflare 블록에 대한 수정의 4 가지 실제 범주가 있습니다. 그들은 얼마나 오랫동안 작동을 유지하는 데 크게 다릅니다.
Tier 4 ( 신뢰할 수있는) : 사용자 시약 및 기본 플래그 조작
이것은 대부분의 개발자가 시도하는 첫 번째 일입니다: 사용자 정의 에이전트를 설정, 제거 --enable-automation 깃발 및 overriding navigator.webdriver 으로 addInitScript. 그것은 위에 6개의 신호의 단 하나 하나를 요구합니다.
생산의 수명 : 일 ~ 주. Cloudflare의 기본 탐지는이 층을 지나서 멀다.
적절한 경우 : 실제 봇 감지가없는 사이트, 가장 명백한 플래그를 억제해야합니다.
Tier 3 (무제한 신뢰성): 스텔스 플러그인
은 puppeteer-extra-stealth 플러그인의 가족, 같은 라이브러리를 통해 Playwright에 포트 playwright-stealth. 이 헝겊 조각은 수십개 이상 navigator 재산, 소음을 가진 override 화포 readbacks를 헝겊 조각하고, 페이지 수준 JavaScript 주입을 통해 위 신호의 몇몇을 취급합니다.
생산의 수명 : 몇 달에 주간. 패치 자체는 서명 감지 시스템을 식별 할 수 있으며, 패치는 Chromium의 밑줄 렌더링 파이프보다 다른 레이어에서 작동 - 그래서 캔버스와 WebGL은 여전히 가장자리 케이스에 도전 할 때 브라우저를 내기.
적절한 경우 : 온건하게 보호 된 사이트, 시제품, 환경의 스크랩이 허용됩니다.
결국 실패 : 페이지 레벨 패치는 알려진 패턴입니다. 에 따르면 headless 브라우저의 탐지에 게시 된 연구, 자동화된 브라우저는 패치가 성공적으로 spoof 속성 값이 있을 때에도 패치의 타이밍과 행동에 의해 식별될 수 있습니다.
Tier 2 (신뢰도) : 스텔스 플러그인 + 주거 프록시 + 주의 행동
주거 프록시를 추가하고 현실적인 타이밍으로 스크립트를 계측 — 가변 지연, 마우스 운동 곡선, 스크롤 패턴 - 스텔스 플러그인 스택에. 이 주소는 IP-geo 신호와 행동 신호.
생산의 수명 : 월. 이것은 가장 자동화 팀이 합리적인 보호 사이트에 정착하는 곳입니다.
나머지 실패 모드 : 로컬 × 시간대 × IP 일관성 문제. 당신은 독일의 주거 프록시를 구입; 당신은 유럽 / 버 린에 브라우저 시간대를 설정하는 것을 잊지; 언어 헤더는 여전히 보내 en-US. 오작곡은 침묵한다 — 너의 스크립트는 오류가 없다 — 그러나 Cloudflare의 도전율은 주 동안 꾸준히 상승한다.
Tier 1 (최대 신뢰할 수 있는): 엔진 수준의 정체성 일관성
이것은 지문 표면이 JavaScript 주입을 통해 브라우저 이진 자체 내부에 패치되는 Chromium 빌드를 의미합니다. 캔버스, WebGL, 오디오, 항해자 특성, 화면, 글꼴, 시간대 및 로컬가 서로 일치하기 위해 생성되고 프록시 IP 지질을 의미합니다. 그리고 프록시가 프로필에 바인딩되므로 정렬은 자동으로 저장되므로 작업자가 기억해야 할 것입니다.
이것은 무엇인가 Clawbrowser 제공. 엔진 레벨 패치는 감지 시스템이 훔쳐서 훔쳐서 훔쳐서 훔쳐서 스텔스 코드를 실행하지 않기 때문에, 값은 브라우저가 기본적으로보고 있는지 간단히 설명합니다. 프로파일-바운드 프록시는 실패의 locale/timezone/IP mismatch 클래스를 삭제합니다.
Playwright를 로컬 anti-detect 런타임으로 전환하고 호스트 브라우저 서비스에 이동하면 Clawbrowser 대 Browserbase 비교 배포, 개인 정보 보호 및 비용 거래.
생산의 수명 : 무한, 정기적인 프로필 재생과. 각 프로파일이 알려진 스텔스 서명을 나르기보다 독특하기 때문에 접근 방식은 분명히.
적절한 경우: 모든 생산 작업 흐름은 재고 Chromium에 머무는 것보다 더 많은 신뢰성이 중요합니다. 특히 오케스트라 션 레이어가 런타임 레이어가 스왑된 언젠가 될 수 있기 때문에 AI 에이전트 작업 부하.
Step-by-Step 구현: Tier 1 수정
재고 Playwright + 스텔스 플러그인 설정에서 엔진 레벨 실행 시간은 4 단계와 하나의 코드 변경을 걸립니다.
1 단계 : 기존 스택이 어떻게 생겼는지 확인하십시오.
어떤 것을 바꾸기 전에, 공공 지문 검사관에 대하여 당신의 기존하는 체제를 달리십시오 웹 사이트 또는 creepjs. 표면이 떨어지는 참고. 대부분의 훔친 플러그인 설정은 적어도 캔버스, WebGL 및 TLS에서 실패합니다.
단계 2: 실행 시간을 설치
Clawbrowser를 위해, 독립에서 시작 clawctl 공공의 아카이브
clawbrowser/clawctl 출시 :
# Download the matching clawctl-* archive for your OS/arch.
open https://github.com/clawbrowser/clawctl/releases/latest아카이브 추출 후, 일치하는 에이전트 통합 및 설정 설치 당신의 API 열쇠:
clawctl install --agent claude-code --json
clawctl config set --api-key "clawbrowser_xxxxx"3 단계 : 지문 프로파일을 사용하여 관리 된 세션을 시작합니다.
clawbrowser start --session work -- --fingerprint=fp_us --country=US --connection-type=residential
clawbrowser endpoint --session work
# prints: http://127.0.0.1:9222은 --fingerprint, --country· --connection-type flags는 캔버스, WebGL, 항해자, 화면, 글꼴, 시간대, Locale, and의 경계 주거 프록시 IP가 미국 정체성으로 정렬되는 프로파일을 선택합니다.
단계 4: 당신의 Playwright 스크립트에서 한 줄을 변경
이전 :
browser = await p.chromium.launch(headless=False)후:
endpoint = "http://127.0.0.1:9222"
browser = await p.chromium.connect_over_cdp(endpoint)
page = browser.contexts[0].pages[0]downstream - 위치, 탐색, assertions - unchanged 작동합니다. 에이전트 또는 자동화 논리는 터치되지 않습니다. 연결 패턴 변경 만.
5 단계 : 생산 트래픽을 실행하기 전에 검증
런타임으로 배송되는 검증 페이지를 실행하여 상향 ID를 확인하는 것은 당신이 기대하는 것입니다:
clawbrowser start --session work --verify -- https://example.com이것은 가장 팀 건너뛰고 대부분의 팀이 나중에 다시 돌아갑니다. 프로필 생성 후 번 검증하면 버그의 조용한 locale-mismatch 클래스를 잡습니다.
다중 세션 배포를 포함한 완벽한 CDP 통합 패턴을 보려면, 봅니다. Clawbrowser 문서.
예상 결과 및 혜택
스텔스 플러그인 기반 스텔스에서 엔진 수준의 정체성에 이동 한 후, 생산의 변화하는 미터는 다음과 같습니다.
- CAPTCHA 비율 Cloudflare-protected 사이트 (스텔스 플러그인과의 비교)에서 단거리의 비율로 ~30–60% 떨어진 반면, 나머지 CAPTCHA는 정체성 분류보다는 행동 패턴에 의해 합법적으로 트리거됩니다.
- Session 수명 는 몇 시간에서 일 또는 주까지 연장되어 세션이 첫 번째 수십 가지 작업 후에 급격히 파쇄되지 않기 때문에.
- Maintenance overhead 패치가 매번 업데이트할 필요가 없기 때문에 삭제합니다. Cloudflare의 탐지 모델이 진화합니다.
- 멀티 계정 워크 각 세션에는 모든 세션에서 공유되는 동일한 스텔스 피치 서명보다 일관성과 명백한 ID가 있기 때문에 신뢰할 수 있습니다.
솔직한 동굴 : 브라우저가 CAPTCHA를 보편적으로 우회하지 않습니다. 모든 새로운 세션에 상호 작용하는 도전을 발행하는 사이트가 계속되고, 여전히 핸들링 할 필요가있는 어떤 CAPTCHA를 표시해야 함 - CAPTCHA를 조정하여 워크플로우를 조정하거나, 일부 워크플로우가 인간의 루프 개입을 필요로한다는 것을 수락합니다.
피할 수있는 일반적인 실수
엔진 레벨 패치의 상단에 CDP overrides 레이어링
런타임이 이진 수준에서 지문을 처리하는 경우, Playwright의 CDP 명령을 사용하여 navigator 속성 또는 캔버스 동작을 무시하지 마십시오. 두 층은 엔진 레벨 접근이 피하기 위해 특별히 설계되었는지 감지 가능한 일관성을 생성 할 수 있습니다.
중보 프록시 교체
활성 세션 동안 프록시를 회전 - 워크플로우를 통해 IP 반도 전환 - 실제 인간이 30 초마다 IP를 변경하지 않기 때문에 강력한 봇 신호입니다. 세션 당 하나의 프록시를 사용하십시오. 새로운 식별자를 위해 재생된 프로필을 사용하여 새로운 세션을 시작합니다.
timezone/locale 정렬을 무시
프록시를 수동으로 구성하면 브라우저의 시간대, 로컬 및 프록시의 지리와 함께 허용 된 언어를 수동으로 정렬해야합니다. 이 중 하나를 잊어 버린 것은 가장 일반적인 침묵 장애 모드입니다. 프로파일-바운 프록시 시스템은이 종류의 버그를 제거합니다.
"different" identities에서 동일한 지문을 재사용
같은 캔버스 지문과 동일한 WebGL 렌더링기 문자열과 같은 두 세션은 사용자 에이전트가 각 선물에 관계없이 Cloudflare에 동일한 정체성입니다. Distinct 식별은 명백한 지문 프로파일을 필요로하며, 명백한 쿠키는 없습니다.
headless 형태를 headful와 동일하게 대우
Headless Chrome에는 추가 지문이 있습니다 (다른 오디오 출력, 다른 기본 플러그인 목록, 몇몇 케이스에 있는 다른 연출 경로). 당신의 국부적으로 디버깅이 머리가 있는 형태에 있고 당신의 생산 배치는 머리가 없는 경우에, 생산 ID를 따로따로 검증합니다.
자주 묻는 질문
왜 내 Playwright 스크립트는 로컬로 작동하지만 생산을 차단?
대부분의 일반적인 이유는 환경 차이입니다. 로컬 개발은 주거 IP, 당신의 실시간 영역 및 사용자의 개발자 기계 지문을 사용합니다. 생산은 데이터 센터 또는 프록시 IP 뒤에 Linux 컨테이너에서 실행되며 잠재적으로 다른 시간대, Locale 및 지문 표면이 있습니다. 관성 코드는 동일합니다. 정체 층은 완전히 다릅니다. 수정은 모두 환경에서 일관된 정체성을 생산하는 데 사용됩니다.
주거용 프록시를 사용하여 Cloudflare 문제를 해결합니까?
아니. 주거 프록시는 IP-geo 신호를 수정하지만 캔버스, WebGL, TLS, navigator 및 timezone 신호를 남깁니다. 여전히 자동화 패턴을 방출하는 경우, Cloudflare는 여전히 세션을 감지합니다. 수정은 IP뿐만 아니라 모든 신호를 연결해야합니다.
는 playwright-stealth Cloudflare-protected 사이트에 대한 충분한?
밝게 보호 된 사이트를 위해, 종종 예. 활성 Cloudflare Bot Management 또는 모든 온건하게 최근 엔터프라이즈 봇 솔루션이있는 사이트를 위해, 일반적으로 - 및 신뢰성은 Cloudflare의 모델 업데이트로 달랐습니다. 신뢰성이 중요 할 생산 워크플로를 위해 플러그인 수준은 알려진 천장을 가지고 있습니다.
Cloudflare의 "Verified Bot"프로그램은 무엇입니까? - 나는 단지 내 봇을 등록해야합니까?
사용 사례가 할당되면 (검색 엔진 크롤러, 모니터링 서비스, 접근성 도구), Cloudflare의 검증된 봇 프로그램 봇 상태를 확인하지 않는 대부분의 자동화 및 AI 에이전트 워크플로우는 합법적인 경로와 올바른 대답입니다. 검증된 봇 상태에 대한 인증이 아니라, 자동화는 자체 메모리에 대한 탐지를 처리해야 합니다.
이 접근법은 다른 반대로 봇 공급 업체 (DataDome, Akamai, PerimeterX)에 대해 작동합니까?
동일한 원칙은 다음과 같습니다. 이진 수준에서 정체성을 더 강화하고, 더 적은 쉽게 감지 시스템은 자동화로 세션을 플래그링 할 수 있습니다. 특정 신호는 각 공급업체가 서로 무게를 다룹니다. 행동 패턴, 믹스에서 Akamai, PerimeterX에서 믹스에 크게 의존하지만 엔진 수준의 정체성은 모두의 구조적 답변입니다.
관련 기사
패턴은 일관성: Playwright + Stock Chromium은 감지 가능한 신호, 페이지 레벨 패치는 감지 할 수 있지만 일부 신호를 주소로 생성하고, 유일한 튼튼한 대답은 브라우저 바이너리와 일치하는 프록시 egress 내부의 정체성입니다.
스크립트가 Cloudflare에 의해 차단을 유지하면 가장 높은 수준의 변경은 "메가 Chromium에 훔치는"에서 기본이며 프록시가 일관성있는 프로파일에 바인딩되는 Chromium 빌드를 사용하는 것은 구조적 인 수정이며 2 년 동안 작동하는 스크립트의 차이입니다.
Clawbrowser 이 층을 정확히 만들기 위해 내장되어 있습니다. 표준 CDP를 말하므로 기존의 Playwright 스크립트가 한 줄에 의해 변경됩니다. 아래 브라우저는 플러그인 기반 접근이 일치 할 수있는 지문, 프록시 바인딩 및 ID 일관성을 처리합니다.
계속 읽기


