설명
헤드리스 브라우저는 보이는 창 없이 실행되면서 내비게이션, DOM 상호작용, 렌더링을 위한 프로그래밍 방식 API를 노출하는 일반 브라우저(Chrome, Firefox, WebKit)입니다. JavaScript를 실행하고, CSS를 적용하며, 쿠키를 처리하고, 일반 브라우저와 구분할 수 없게 동작합니다 — 유일한 차이는 UI 창이 없고 사람의 입력이 없다는 점입니다.
스크래핑에서 헤드리스 브라우저는 원하는 데이터가 JavaScript에 의해 클라이언트 측에서 렌더링될 때 반드시 필요합니다. 최신 웹 앱(React, Vue, Angular SPA)은 흔히 빈 HTML 껍데기를 반환하고 JS가 실행된 후에 채워지는데, `requests`나 `axios` 같은 일반 HTTP 클라이언트는 이 빈 껍데기만 보게 됩니다. 헤드리스 브라우저는 전체 페이지 생명주기를 실행하여 완전히 렌더링된 DOM을 제공합니다.
주요 드라이버로는 Playwright(Microsoft, 멀티 브라우저), Puppeteer(Google, Chrome/Firefox), Selenium(더 오래된 WebDriver 기반, 가장 폭넓은 언어 지원)이 있습니다. 각각은 내비게이션, 클릭, 입력, 요소 대기, 네트워크 요청 가로채기, 콘텐츠 추출을 위한 메서드를 제공합니다. 사람처럼 보여야 하는 자동화 작업에는 헤드리스 브라우저와 스텔스 플러그인, 레지덴셜 프록시를 결합한 조합이 표준 스택입니다.
작동 방식
Playwright/Puppeteer/Selenium을 통해 헤드리스 브라우저를 실행하면, 드라이버는 `--headless` 플래그와 함께 실제 Chromium(또는 Firefox/WebKit) 프로세스를 시작하고 디버깅 프로토콜(Playwright/Puppeteer의 경우 Chrome DevTools Protocol, Selenium의 경우 WebDriver)을 통해 연결합니다. 스크립트는 `page.goto`, `page.click`, `page.evaluate`와 같은 명령을 해당 프로토콜을 통해 전송하고, 브라우저는 마치 실제 사용자가 조작하는 것처럼 이를 실행합니다.
브라우저는 실제 브라우저가 수행하는 모든 작업을 처리합니다: TLS 핸드셰이크(자체 지문 포함), HTTP/2 또는 HTTP/3 협상, 쿠키 저장, JavaScript 실행, 레이아웃, 페인트, 하위 리소스에 대한 네트워크 요청. 스크립트는 이러한 작업 중 어느 것이든 가로채고, 요청/응답을 수정하고, 스크립트를 삽입하고, 렌더링된 DOM에서 데이터를 추출할 수 있습니다.