크롬 웹 스토어 확장을 다운로드해보자
웹 스토어 확장을 CRX로 내려받아 폴더로 풀어 셀레니움에 올릴 수 있게 만들어보자
크롬 웹 스토어 확장을 다운로드해보자
크롬 웹 스토어 확장을 다운로드해보자
웹 스토어 확장을 CRX로 내려받아 폴더로 풀어, 셀레니움 --load-extension에 바로 올릴 수 있게 만들어보자.
1. 서론 (Introduction)
- 문제/상황 (Problem):
- 웹 스토어는 브라우저 설치 버튼만 제공한다. 셀레니움 자동화에 확장을 쓰려면 압축 해제된 확장 폴더가 필요한데, 그 폴더를 손에 넣을 방법이 마땅치 않다.
- 목적 (Purpose):
- 확장 ID만으로 CRX를 내려받아 폴더로 풀어, 자동화 드라이버에 그대로 넘길 수 있는 도구를 만든다.
- 대상 (Target Audience):
- 셀레니움에 특정 확장(차단기·VPN·수집 도우미 등)을 올려 자동화하려는 개발자
2. 방법 및 과정 (Methods & Process)
- 배경 조사 및 데이터 (Data Collection):
- 웹 스토어는 비공식
update2엔드포인트로 CRX를 직접 내려준다. CRX는 헤더 뒤에 ZIP이 붙은 형식이라, 헤더만 건너뛰면 일반 ZIP처럼 풀린다.
- 웹 스토어는 비공식
| 단계 | 설명 |
|---|---|
| ID 추출 | 웹 스토어 URL에서 32자(a~p) 확장 ID를 뽑는다 |
| CRX 다운로드 | update2 엔드포인트에 prodversion을 충분히 높여 요청한다 |
| CRX → ZIP | 매직(Cr24)·버전 확인 후 헤더 길이만큼 건너뛴다 |
| 압축 해제 | 남은 ZIP 본문을 폴더로 풀어 --load-extension에 사용 |
- 접근 방법 (Approach Methods):
- [방법 1]:
update2엔드포인트에 redirect 응답으로 CRX를 받는다.prodversion이 낮으면 204(No Content)가 오므로 충분히 높게 둔다. - [방법 2]: CRX2와 CRX3는 헤더 구조가 다르므로 버전을 읽어 오프셋을 계산한 뒤 ZIP 본문만 추출한다.
- [방법 1]:
- 분석 및 해결 프로세스 (Analysis Flow):
- 도구/기술: Python, requests, zipfile, struct
- 주요 단계: ID 추출 $\rightarrow$ CRX 다운로드 $\rightarrow$ CRX 헤더 건너뛰기 $\rightarrow$ ZIP 압축 해제 $\rightarrow$ manifest 확인
- 결과 도출 및 검증: 공개 확장(uBlock Origin Lite)을 받아 9.9MB CRX를 내려받고, CRX3 헤더를 건너뛰어 압축 해제한 뒤
manifest.json(version 2026.625.2148)을 읽는 데 성공했다.
3. 결과 (Results)
- 분석 결과 요약:
- 확장 ID 하나로 압축 해제된 확장 폴더를 얻어, 셀레니움 드라이버에
extensions=[폴더]로 넘길 준비가 끝났다. - CRX2·CRX3를 모두 처리하므로 최신 확장에도 동작한다.
- 확장 ID 하나로 압축 해제된 확장 폴더를 얻어, 셀레니움 드라이버에
4. 인사이트 및 액션 (Insights & Action)
- 인사이트 (Insight):
- 비공식 엔드포인트는
prodversion이 낮으면 조용히 204를 돌려준다. 빈 응답을 받으면 버전부터 의심한다. - CRX는 단순 ZIP이 아니라 헤더가 붙은 형식이다. 옛 코드처럼 4바이트만 건너뛰면 CRX3에서 깨지므로 버전별 오프셋을 계산해야 한다.
- 비공식 엔드포인트는
- 실행 방안 (Action Plan):
- 자동화에 필요한 확장은 미리 이 도구로 받아 폴더로 보관하고, 드라이버 생성 시 경로만 넘긴다.
- 한 줄 결론 (Key Takeaway):
- 확장 ID만 있으면 CRX를 받아 폴더로 풀어 셀레니움에 올릴 수 있다. 샘플 코드
- 다음 스텝 (Next Step):
- 이렇게 받은 VPN 확장을 셀레니움에 올려, 국가를 골라 우회 IP가 바뀌는지 확인해보자.
This post is licensed under CC BY 4.0 by the author.