자동화 스크립트가 갑자기 CAPTCHA 도전을 트리거 할 때, 유혹은 당신이 마지막 시간과 희망을 시도하지 않은 모든 훔친 라이브러리에 도달하는 것입니다. 그 접근법은 사람들이 6 개월 이상 5 가지 훔친 플러그인을 통해 사이클을 종료하고 실제로 변경되는 것을 알 수 없습니다.
더 나은 접근법은 진단입니다: 7개의 신호의 어느 것이 현재 당신의 회의를 기인하고, 신호 및 배를 고쳤습니다. 이 가이드는 순서 탐지 체계에 있는 7개의 신호를 통해서 그(것)들을 무게를 답니다 — 가장 likely-culprit 첫번째 — 그리고 당신은 고립에서 각 것을 시험하는 방법을 보여줍니다. 목표는 당신이 생산 CAPTCHA 비율 스파이크 때 15 분에서 실행할 수 있는 체크리스트를 주는 것입니다.
왜 감지 시스템 문제 CAPTCHA 도전
A CAPTCHA는 을 들을 수 있습니다. 의 원인은 검출 시스템 (Cloudflare Bot Management, DataDome, Akamai, hCaptcha의 위험 엔진, reCAPTCHA Enterprise, 또는 공급 업체 별 스택) 을 읽는 것입니다. 세션의 신호 벡터를 읽고 위험 점수가 임계값을 교차하기로 결정했습니다. CAPTCHA는 단일 규칙에 따라 자신감을 기반으로 함대를 발행합니다.
2개의 implications:
- 같은 코드는 월요일에 전달할 수 있으며 금요일에 실패 모델이 진화하거나 훔친 서명을 사용하여 다른 함대가 떨어졌다.
- 두 개가 꺼져 있다면 한 신호가 충분하지 않습니다. 감지 시스템은 조합의 신호를 계량합니다. 푹신한 IP를 가진 깨끗한 지문은 여전히 방아쇠를 붙이는 지문을 가진 깨끗한 IP입니다.
진단 접근법은 순차적이다: 신호가 현재 무게가 가장 높다는 것을 확인하고, 그 첫번째를 고치고, 그 후에 재효율합니다. 아래에 신호는 대중적인 반대로 로봇 연구에서 관찰할 수 있는 무게 본에 근거를 둔 위험 점수에 전형적인 기여에 의해, 주문되고 실패 형태는 생산 문제 해결에서 일반적으로 보고됩니다.
확인하기 위한 7개의 신호, 순서에서
신호 1: 국부적으로 × timezone × IP 지리 mismatch
이것은 가장 일반적인 침묵 장애이고 가장 쉬운 것은 확인하기 때문에 신호 #1입니다. 탐지 시스템 상호 설정 3 값:
- 본문 바로가기
Accept-Language헤드러와navigator.languages - 브라우저의 보고된 timezone (
Intl.DateTimeFormat().resolvedOptions().timeZone) - 연결의 IP 지리 (datacenter, 주거, 국가, 지역)
베를린의 실제 사용자 de-DE 또는 en-DE, Europe/Berlin, 독일 IP. 미국 영어 Chromium은 프랑크푸르트 주거 프록시를 통해 노선 en-US, America/New_York, 그리고 독일 IP — 검출 시스템은 특히 보기를 위한 공동 실패.
체크인 방법:
자동화된 브라우저를 열고 검증 페이지를 방문하십시오. browserleaks.com/ip 으로 browserleaks.com/javascript. 3개의 가치를 비교하십시오: IP 위치, 시간대 및 언어. 그들은 1개의 일관된 지리를 설명해야 합니다.
수정 방법:
프록시 및 지문을 별도로 구성하는 경우, 수동으로 모든 세 가지를 매번 정렬해야합니다. 구조적 수정은 프로파일-바운드 프록시 라우팅입니다. 프록시가 시간 내에 지문을 묶은 런타임이므로 지리학은 자동으로 일관성을 유지합니다. 브라우저 runtime 가이드 이 층은 왜 중요합니까?
신호 2: 화포, WebGL 및 오디오 지문 재사용
이 신호 #2는 개별 세션이 깨끗하게 보일 때에도 다중 계정 함대를 파괴하는 실패입니다. 동일한 기계에 두 세션은 동일한 캔버스 읽기, 동일한 WebGL 렌더링기 문자열 및 동일한 AudioContext 출력을 생산합니다. 감지 시스템에 "1,000 세션과 동일한 캔버스 해시 및 회전 사용자 에이전트"는 많은 것을보고하려고 한 하나의 정체성입니다.
체크인 방법:
을 얻 creepjs (또는 오픈 소스 지문 검사기) 두 개의 별도의 세션에서 캔버스, WebGL 및 오디오 해시를 비교합니다. 두 세션이 동일한 해시를 생산하는 경우, 귀하의 함대에는 지문 재사용 문제가 있습니다.
수정 방법:
각 세션은 엔진 수준에서 생성 된 명백하고 내부적으로 일관성 지문 프로파일을 필요로합니다. Page-level Patches (stealth plugins)는 캔버스 readbacks에 소음을 추가 할 수 있지만 일반적으로 스케일에 완벽하게 구분 된 일관성있는 프로파일을 생성 할 수 없습니다. 어떤 표면의 전체 재고는 우리의 브라우저 지문 가이드.
신호 3: TLS/JA3/JA4 지문
TLS Client Hello는 애플리케이션 코드 아래에서 동작하기 때문에 신호 #3입니다. TLS Client Hello는 모든 HTTPS 연결의 시작 부분에 전달되어 지문이 가능한 모양을 가지고 있습니다. JA3 또는 JA4 해시를 생산하는 지원 곡선을 확장 목록, 지원 곡선을 확장합니다. 다른 Chromium 버전은 다른 해시를 생산합니다. TLS를 자체를 구축하는 자동화 라이브러리 (Chromium을 통해 이동)는 실제 브라우저와 일치하지 않는 해시를 생성합니다.
체크인 방법:
연혁 tls.peet.ws 자동 브라우저에서. 페이지는 JA3 및 JA4 해시를 연결에 반환합니다. 같은 OS에서 바닐라 Chromium의 JA3/JA4와 비교 — 그들은 일치해야합니다. 자동화 라이브러리가 자체 해시를 생성하는 경우, 이것은 실패입니다.
수정 방법:
브라우저의 실행시간을 사용하여 별도의 HTTP 클라이언트보다는 Chromium TLS 스택을 활용합니다. 브라우저를 우회하는 HTTP/scraping 라이브러리를 사용하는 경우 가장 관련이 있습니다. CDP를 통해 전체 브라우저 기반 자동화는 일반적으로 Chromium의 기본 TLS 지문을 올바르게 상속합니다.
신호 4: navigator.webdriver 및 기타 자동화 플래그
이것은 신호 #4 그것은 가장 기본적인 것이고 가장 통용되는 가장 일반적으로 — 또한 patches 자체가 탐지되기 때문에 하나. 과태 Playwright/Puppeteer Chromium 세트 navigator.webdriver = true. 스텔스 플러그인은 그것을 override false. Sophisticated 검출 시스템은 오버라이드의 manner를 읽기 시작 (지정적인 비 구성, 프로토 타입 체인 등) 자체로 신호.
체크인 방법:
자동화된 브라우저 콘솔에서 실행:
console.log(navigator.webdriver);
console.log(Object.getOwnPropertyDescriptor(navigator, 'webdriver'));첫 번째는 false (주) undefined 실제 브라우저에서; 두 번째는 실제 브라우저의 descriptor 패턴과 일치해야합니다.
수정 방법:
엔진 레벨 패치 (Chromium binary 내부의 변경)는 실제 브라우저에서 indistinguishable 인 property descriptors를 생성합니다. JavaScript 주입을 통해 페이지 레벨 패치에는 특성 패턴이 있습니다. 이것은 여러 가지 이유 중 하나입니다. 이진 패딩 실행 시간은 플러그인 기반 스텔스입니다.
신호 5: 페이지 짐 후에 Behavioral 본
이것은 지문 단계가 통과한 후에만 걷기 때문에 신호 #5입니다. 페이지 짐, 행동 체크가 시작되면: 쥐 운동 entropy, 일폭 본, 행동 사이 타이밍, 형태 입력에 중요한 치기 학대. 0개의 쥐 경로로 정확한 협조에, 유형에 있는 정확한 협조에 누르는 자동화는 특성 당 정확하게 50ms에, 그리고 혼자 행동에서 검출될 수 있는 후에 모양 200ms를 제출합니다.
체크인 방법:
자동화에서 수동 상호 작용에서 하나까지 작용 추적을 비교하십시오. 다름은 보통 명백합니다: 진짜 운동에는 곡선, 가속도, 간단한 일시적인 misclicks가 있습니다. 자동화에는 똑바른 선 및 획일한 타이밍이 있습니다.
수정 방법:
행동 variance 추가 : bezier-curve 마우스 경로, 지터 타이밍, 경사로 및 decelerates의 스크롤 속도, 클릭하기 전에 페이지 요소에 일시 정지. 라이브러리 playwright-extra 그리고 이와 동등한 도구는 도움가 있습니다. 현실적인 천장은 "인기적이지만 약간 hurried Human"와 같은 것으로 보인다. "Inistinguishable from any random user."
신호 6: WebRTC IP 누설 및 DNS 누출
WebRTC의 STUN 프로토콜은 브라우저가 프록시 뒤에 있을 때도 로컬 IP 주소를 공개할 수 있습니다. 명시적으로 처리하지 않고 "Frankfurt 주거" 세션은 ICE 후보를 통해 실제 San Francisco datacenter IP를 누출합니다. DNS 해상도는 브라우저의 DNS가 프록시를 통해 로컬 해결자를 통해 진행할 수 있습니다.
체크인 방법:
연혁 browserleaks.com/webrtc. 페이지는 지역 및 공공 IPs WebRTC 공개를 보고합니다. 둘 다 당신의 프록시에 일치해야 합니다. 국부적으로 IP가 당신의 진짜 기계의 네트워크를 보여주는 경우에, 당신은 WebRTC 누출이 있습니다. 체크 browserleaks.com/dns DNS에 대해
수정 방법:
WebRTC를 릴레이 전용 모드로 강제로 강제하는 표준 완화는이지만, 프라이버시 의식 또는 자동화 된 구성으로 관찰 할 수 있습니다. 클리너 수정은 WebRTC 및 DNS를 HTTP 트래픽과 같은 프록시를 통해 처리하는 런타임입니다. 기본적으로, 운영자 구성이 필요하지 않습니다.
신호 7: 머리 없는 형태는 말합니다
이 신호 #7는 헤드리스 배포에만 관련이 있기 때문에 - 그러나 그것은 단 하나 가장 큰 "개발에서 작동, 생산에서 실패" 실패입니다. 헤드리스 Chromium은 헤드리스에서 추가 지문 차이를 가지고 있습니다 : 누락 플러그인 (zero 플러그인은 의심스러운), 다른 오디오 출력, 다른 기본 뷰 포트, 특정 렌더링 경로는 하위적으로 다른 출력을 생성, (최근에) 리터럴 HeadlessChrome 사용자 에이전트의 토큰.
체크인 방법:
두드러운 형태에 있는 동일한 지문 검사를 국부적으로와 당신의 두드러운 생산 환경에서 실행하십시오. 각 표면을 비교하십시오. 당신이 찾아내는 다름은 어떤 생산 탐지 체계가 보는지입니다.
수정 방법:
디자인에 의해 headless/headful parity를 전시하는 런타임을 사용하십시오 — 지문 가치는 형태에 관계 없이 동일하, 플러그인 명부는, 보고된 Chrome 버전은 일관된 입니다. 당신의 더미가 훔치는 플러그인을 가진 주식 headless Chromium을 사용하는 경우에, 각 표면을 개별적으로 벌레잡기 위하여 계획.
15 분 진단 워크 플로우
CAPTCHA : 을 을 곱하면 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈 곱셈
-
자동 브라우저를 열고, 방문
browserleaks.com/ip으로browserleaks.com/javascript. IP 지리, 시간대 및 비교Accept-Language. 그들이 일관되게 한 국가를 묘사하지 않는 경우에, 당신의 문제는 신호 #1입니다. 더 나아가기 전에 일관성과 revalidate를 고치십시오. -
"different" 세션의 두 가지에서 동일한 지문 검사를 중단하십시오. 캔버스, WebGL 및 오디오 해시와 비교하십시오. 그들이 일치하면 문제는 신호 #2 - 세션 전체에 지문 재사용입니다. 함대는이 문제를 해결 할 때까지 한 가지 정체성입니다.
-
Visit
tls.peet.wsJA3/JA4와 같은 OS에서 바닐라 Chromium을 비교합니다. Mismatch는 Signal #3입니다. -
콘솔 검사
navigator.webdriver그리고 그것의 재산 descriptor. 비표준 descriptor는 신호 #4입니다. -
자동화된 상호 작용을 추적하십시오. 직선 마우스 경로 및 균일 한 타이밍은 신호 #5입니다. 행동 차이를 추가하십시오.
-
Visit
browserleaks.com/webrtc으로browserleaks.com/dns. 프록시와 일치하지 않는 로컬 IP는 Signal #6입니다. -
헤드리스: 헤드리스 (현지)와 헤드리스 (생산) 사이의 모든 6 신호를 비교합니다. 차이는 신호 #7입니다.
7과 CAPTCHA 비율을 통해 일한 경우 여전히 높다, 나머지 원인은 일반적으로 행동 상관 관계 (예를 들어, 세션에 걸쳐 동기화 된 작업) 또는 비율 관련 - 즉, 너무 짧은 창에서 너무 적은 IP에서 너무 많은 트래픽을 전송하는 것입니다. 이러한 작업 문제, 스택 문제 없습니다.
더 깊은 Cloudflare 별 실패 모드를 위해, 참조 왜 Playwright 스크립트가 Cloudflare에 의해 차단. 브라우저 도구가이 레이어를 잘 처리하는 평가를 위해, 우리의 비교를 참조하십시오 AI 에이전트 자동화를위한 7 가지 최고의 브라우저.
CAPTCHA : 선택하세요 하우스
모든 스텔스 플러그인을 켜기
스텔스 플러그인을 통해 신호 각 하나의 고정 폐기물 주간을 측정하지 않고. 진단을 실행, 실패 신호를 식별, 그 주소를 구체적으로 해결하는 수정을 선택합니다. "다른 스텔스 라이브러리를 시도"는 진단 전략이 아닙니다.
스크립트가 변경됨
코드가 변경되지 않은 경우, 회귀는 환경입니다 : 대상 사이트 업데이트 감지 규칙, 당신의 IP 풀은 블랙리스트를 가지고, 당신의 스텔스 라이브러리는 패턴 일치, 또는 컨테이너의 헤드리스 빌드 무진. 환경, 코드가 아닌.
모든 CAPTCHA를 감지 실패로 치료
일부 사이트는 신호에 관계없이 정책으로 모든 새로운 세션에 기본 CAPTCHA를 발행합니다. 당신의 CAPTCHA 속도가 비-제로이지만 안정적이고 겸손한 경우, 합법적으로 될 수 있습니다. 문제는 실제 사용자가 볼 수있는 일률이 무엇인지에 따라 일관성이 있는지 여부는 0입니다.
그것을 방지 대신 CAPTCHA를 해결
CAPTCHA : 을 선택하시기 바랍니다 을 선택하시기 바랍니다 을 선택하시기 바랍니다 을 선택하시기 바랍니다 을 선택하시기 바랍니다 을 선택하시기 바랍니다 을 선택하시기 바랍니다 을 선택하시기 바랍니다 을 선택하시기 바랍니다 를 선택하시기 바랍니다 를 원하는 경우 를 선택하시기 바랍니다 을 선택하시기 바랍니다 를 원하는 경우 을 선택하시기 바랍니다 를 원하는 경우 을 선택하시기 바랍니다 를 원하는 경우 을 선택하시기 바랍니다 를 원하는 경우 을 선택하시기 바랍니다 을 선택하시기 바랍니다 을 선택하시기 바랍니다 을 선택하시기 바랍니다 를 원하는 경우 을 선택하시기 바랍니다 를 원하는 경우 을 선택 를 클릭하십시오 을 선택
일주일에 걸쳐 심장 박동을 무시
한 달에 5 %에서 15 %에서 30 %까지 올라갈 수있는 CAPTCHA 비율은 느린 누출입니다. 일반적으로 감지 모델이 진화함에 따라 증가시키는 지문 또는 행동 패턴이 더 떨어졌습니다. 세션이 끊을 때만 반응하지 않는 미터로 속도를 모니터링하여이 초기를 배치하십시오.
자주 묻는 질문
왜 내 스크립트는 로컬로 작동하지만 생산에 CAPTCHA를 트리거합니까?
가장 일반적인 원인은 환경 편류입니다. 로컬 개발은 주거 IP, 실제 시간대 및 개발자 기계 지문을 사용하여 생산은 잠재적으로 다른 시간대, Locale 및 지문 표면을 가진 datacenter 프록시 뒤에 Linux 컨테이너에서 실행됩니다. 수정은 두 환경 모두에서 동일한 정체성을 생산하는 런타임입니다. #1, #2 및 #7은 일반적으로 모두 관여됩니다.
전적으로 CAPTCHA를 우회하는 방법이 있습니까?
아니. 브라우저 구성, 플러그인, 또는 전동적으로 CAPTCHA를 우회하는 실행 시간이 없습니다. 현실적인 목표는 그 원인이 upstream 신호를 수정하여 트리거되는 속도로 속도를 줄입니다. 여전히 은퇴하거나 해결해야하는 후 CAPTCHA를 수신하는 세션.
CAPTCHA를 사용해야합니까?
CAPTCHA : 을 선택하십시오하세요 자동차, 자전거, 자전거, 자전거, 자전거, 자전거, 자전거, 자전거, 자전거, 자전거, 오토바이, 자전거, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이, 오토바이,
주거 프록시는 혼자 CAPTCHA 트리를 수정?
아니. 주거 프록시 수정 신호 #1 부분적으로 (IP 지리 조각) 하지만 지문, TLS, 행동, 그리고 헤드리스 트웰 신호가 비접촉. 주거 프록시는 일부 사이트에 필요한 및 대부분에 대한 자신의 부족.
빠른 탐지 모델 업데이트는 어떻게 합니까?
지속적으로, 연습에서. 주요 안티 봇 공급 업체는 매일 적어도 매주 모델을 업데이트합니다. 이것은 "일부 6 개월 전"은 신뢰할 수있는 기본 사항이 아닙니다. - 모든 스택은 진단 신호의 지속적인 측정, 한 번 설정이 아닙니다.
결론: 진단은 시험과 과실을 이길
symptom이 원인과 동일하기 때문에 하나의 문제처럼 느껴집니다. 현실은 개별적으로 진단해야하는 7 가지 원인입니다. 이 작업을 잘 처리하는 팀은 저하 가능한 신호와 엔지니어링 시스템과 같은 스택을 치료합니다. 무작위 수정을 시도하여 해결하기 위해 퍼즐처럼 투쟁하는 팀.
구조 패턴은 모든 7 신호의 맞은편과 동일합니다. 가장 높은 레버리지 수정은 브라우저 바이너리 수준에서 설계 된 정체성 코헤드이며, 프록시는 세션 당 지문 프로파일과 저장에 바인딩됩니다. 이 패턴 주소는 신호 #1, #2, #4, #6 및 #7을 동시에두고 #3 (TLS, 일반적으로 Chromium에서 상속) 및 #5 (비탈, 오케스트라 션 레이어 작업을 필요로)를 남겨 둡니다.
Clawbrowser 구조 층을 연결하는 주소에 내장되어 있습니다. 엔진 수준의 지문 생성, 프로파일-바운드 주거 프록시 및 명명 된 고립은 하나의 디자인 선택에서 진단의 대량을 처리합니다. 전체 통합 패턴을 위해 Clawbrowser 문서.
계속 읽기


