Post

playwright에 화면을 달아 웹사이트 정보를 획득해보자

playwright를 좀 더 현실적으로 만들기 위해 화면을 달아보자

playwright에 화면을 달아 웹사이트 정보를 획득해보자

playwright에 화면을 달아 웹사이트 정보를 획득해보자

playwright를 좀 더 현실적으로 만들기 위해 화면을 달아보자

1. 서론 (Introduction)

  • 문제/상황 (Problem):
    • Headless 모드의 브라우저는 리소스 효율적이지만, 일부 웹사이트의 봇 감지 로직에 걸리거나 디버깅 시 실제 렌더링 과정을 확인하기 어렵다.
  • 목적 (Purpose):
    • pyvirtualdisplay를 활용하여 서버 환경에서도 가상 화면(Virtual Display)을 생성하고, 브라우저를 Headed 모드(headless=False)로 실행하여 탐지 우회와 시각적 검증을 동시에 달성한다.
  • 대상 (Target Audience):
    • 봇 감지가 강력한 사이트를 크롤링해야 하거나, GUI가 없는 리눅스 서버 환경에서 브라우저 화면 기반의 자동화를 수행하려는 개발자

2. 방법 및 과정 (Methods & Process)

  • 배경 조사 및 데이터 (Data Collection):
    • Xvfb(X Virtual Framebuffer) 기반의 pyvirtualdisplay가 제공하는 가상 디스플레이 환경과 Playwright의 Headed 모드 결합 시의 안정성을 조사하였다.
기능설명장점
가상 화면(Xvfb)메모리 상에 가상 디스플레이 생성물리 모니터 없이도 GUI 애플리케이션 실행 가능
Headed 모드 실행브라우저 UI를 띄운 상태로 동작실제 사용자와 유사한 브라우징 환경 모사
디스플레이 크기 제어가상 화면 해상도(예: 1280x720) 설정웹사이트의 반응형 레이아웃 및 렌더링 최적화
브라우저 컨텍스트 유지세션 및 사용자 에이전트 커스터마이징지능적인 봇 탐지 알고리즘 우회 가능
리소스 생명주기 관리display.stop()을 통한 자원 정리작업 완료 후 시스템 메모리 및 프로세스 누수 방지
  • 접근 방법 (Approach Methods):
    • [방법 1]: pyvirtualdisplay.Display 객체를 생성하고 시작하여 가상 X 서버 환경을 마련한다.
    • [방법 2]: playwright의 launch 옵션에서 headless=False로 설정하여 가상 화면 내에서 실제 브라우저가 동작하게 한다.
  • 분석 및 해결 프로세스 (Analysis Flow):
    • 도구/기술: Python, playwright, pyvirtualdisplay, beautifulsoup4
    • 주요 단계: 시스템 내 Xvfb 설치 확인 $\rightarrow$ 가상 화면 시작 로직 구현 $\rightarrow$ Headed 모드로 브라우저 런칭 $\rightarrow$ 실제 화면 렌더링 기반 데이터 추출 $\rightarrow$ 가상 화면 및 브라우저 종료 프로세스 통합
    • 결과 도출 및 검증: Headless 모드에서 발생할 수 있는 탐지 문제를 우회하고, 가상 화면 상에서 정확한 페이지 로딩과 데이터 획득이 이루어짐을 확인한다.

3. 결과 (Results)

  • 분석 결과 요약:
    • 가상 화면을 도입함으로써 서버 환경에서도 실제 사용자의 브라우저 사용 환경을 완벽하게 재현할 수 있었다.
    • Headed 모드로 동작함에 따라 브라우저 고유의 특성(Fingerprint)이 자연스럽게 노출되어 봇 감지 시스템에 대한 내성이 강화됨을 확인하였다.

4. 인사이트 및 액션 (Insights & Action)

  • 인사이트 (Insight):
    • 화면이 존재하는 방식으로 데이터를 가져와봤다. 실제 봇을 감지 할 수 있는지 한번 확인해보자.
    • 단순히 엔진을 바꾸는 것을 넘어, 실행 환경(Display)을 제어하는 것이 크롤링의 성공률을 높이는 핵심적인 기술적 진보이다.
  • 실행 방안 (Action Plan):
    • 탐지 난이도가 높은 타겟 사이트에 대해 가상 화면 기반의 Headed 크롤링 엔진을 배포한다.
  • 한 줄 결론 (Key Takeaway):
    • 가상 화면과 Playwright의 조합은 서버 환경에서도 가장 현실적인 브라우저 자동화 환경을 제공한다. 샘플 코드
  • 다음 스텝 (Next Step):
    • 구현된 클라이언트를 대상으로 다양한 봇 탐지 시나리오를 테스트할 수 있는 검증 서버를 구축한다.
This post is licensed under CC BY 4.0 by the author.