Selenium이 Cloudflare에 계속 차단되나요? 실제로 fingerprint가 포착하는 내용(그리고 트리거를 멈추는 방법)
Source: Dev.to
위 링크에 있는 전체 텍스트를 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다. (코드 블록, URL 및 마크다운 형식은 그대로 유지됩니다.)
Cloudflare가 실제로 잡는 것
Selenium의 ChromeDriver는 자동화 플래그를 최소 세 가지 관찰 가능한 방식으로 누출합니다:
navigator.webdriver === true— 설계상 노출되며, WebDriver 사양에서 요구합니다- CDP 클라이언트 서명 — ChromeDriver는 Chrome의 DevTools Protocol을 특정 RPC 패턴으로 감싸며,
Target.*호출의 타이밍과 순서를 통해 감지할 수 있습니다 - 브라우저 UI 신호 누락 — Selenium은 실제 사용자가 항상 생성하는 특정 접근성/윈도우 이벤트 없이 Chrome을 실행합니다
Reddit 스레드의 상위 댓글 중 하나가 이를 잘 요약했습니다:
“Selenium은 ChromeDriver 또는 GeckoDriver 바이너리를 사용하여 작동합니다. 이는 봇을 원하지 않는 모든 평판 좋은 회사가 지문을 남길 수 있는 요소입니다. 이것이 Selenium이 깨졌다는 의미는 아니며—당신이 하려는 일에 맞게 설계되지 않았다는 뜻입니다. Selenium의 목적은 자동화 테스트입니다.”
Selenium은 QA를 위해 설계되었으며, 이 경우 사이트가 당신이 자동화 테스트임을 알아주길 원합니다. Cloudflare의 Bot Management는 이러한 신호들을 인간 기준에 맞춰 점수를 매기며, 그 점수는 빠르게 낮아집니다.
댓글에서 권장하는 내용 (그리고 실제로 동작하는 방법)
| 도구 | 무엇을 하는가 | 주의점 |
|---|---|---|
undetected-chromedriver | WebDriver 플래그와 CDP 문자열을 패치합니다 | Cloudflare가 업데이트를 밀어넣어 몇 달마다 다시 감지합니다 |
SeleniumBase CDP mode | ChromeDriver를 건너뛰고 CDP를 직접 Chrome에 전달합니다 | 대부분의 CF 사이트에서 작동하지만 브라우저당 하나의 프로세스가 필요합니다 |
curl_cffi | 브라우저의 TLS JA3 지문을 가장합니다 | JS 실행이 없으므로 React로 하이드레이션되는 사이트에서 작동하지 않습니다 |
nodriver / zendriver | 패치된 CDP를 사용한 헤드리스 없는 Chrome | 소규모에 적합하지만 1 M 페이지에서는 리소스가 많이 소모됩니다 |
| Real Chrome + stealth profile | 실제 Chrome 바이너리, 지속적인 프로필, 쿠키 유지 | 대다수 안티봇 서비스가 가정하는 바 |
마지막 행이 아래에 보여줄 내용이며, 제가 실제로 사용해 온 방법입니다.
실제 결과
두 캡처는 동일한 브라우저 프로세스, 동일한 머신, 동일한 IP에서 나온 것입니다. 유일한 변수는 지문 설정이었습니다.
현재 제가 사용하는 방법
저는 **browser-act**를 사용하고 있습니다 — 지속적인 스텔스 프로필을 가진 실제 Chrome을 구동하는 CLI입니다. 한 줄 명령:
# Install (uses the skills package registry):
npx skills add browser-act/skills --skill browser-act
# Open a Cloudflare‑protected page in a stealth session:
browser-act --session scrape browser open https://target.site
browser-act --session scrape get markdown > out.md
프로필은 실행 간에 쿠키와 스토리지를 유지하므로, “워밍 브라우저” 신호(히스토리, localStorage, 이전 CF 쿠키 등)가 인간처럼 보입니다. r/webscraping OP의 규모 질문(~1 M 페이지)에서는 프로필 ID 풀을 사용해 회전시키면서 이 작업을 수행하면 되겠지만—그것은 별도의 글입니다.
논쟁할 만한 점
- 목표가 Cloudflare Turnstile 자체라면(전체 JS 챌린지가 아니라) 상황이 다릅니다 —
curl_cffi와 주입된 위젯을 조합하면 작동할 수 있는데, 이는 r/webscraping 답변 중 하나가 보여줬습니다. - 이미 Selenium 코드를 가지고 있고 트래픽이 적다면
undetected-chromedriver가 가장 저렴한 진입점입니다. - 레지던셜 프록시는 브라우저 지문만큼이나 중요합니다. IP가 데이터센터 ASN이라면 브라우저 레이어에서 아무것도 당신을 보호하지 못합니다.
현재 이 문제와 싸우고 있다면 어떤 사이트에서 어떤 것이 거부되는지 알려 주세요 — 메모를 공유하며 비교해 보고 싶습니다. 전체 논의는 r/webscraping 원본 스레드에서 확인할 수 있습니다.