
Cloudflare의 안티봇 페이지를 우회하는 Python 모듈
Zied Boughdir에 의해 향상됨
모든 기능이 핵심 기능에 대해 100% 성공률로 테스트되었습니다:
Cloudflare의 안티봇 페이지("I'm Under Attack Mode" 또는 IUAM이라고도 함)를 우회하기 위한 Python 모듈로, Requests로 구현되었습니다. 이 향상된 버전은 Cloudflare v2 챌린지, 프록시 순환, 스텔스 모드 등을 지원합니다. Cloudflare는 주기적으로 기술을 변경하므로 이 저장소를 자주 업데이트할 예정입니다.
Cloudflare로 보호되는 웹사이트를 스크래핑하거나 크롤링하려는 경우 유용할 수 있습니다. Cloudflare의 안티봇 페이지는 현재 클라이언트가 Javascript를 지원하는지만 확인하지만, 향후 추가 기술을 도입할 수도 있습니다.
Cloudflare가 보호 페이지를 지속적으로 변경하고 강화하기 때문에, cloudscraper는 Javascript 챌린지를 해결하기 위해 JavaScript 엔진/인터프리터가 필요합니다. 이를 통해 스크립트는 Cloudflare의 Javascript를 명시적으로 난독화 해제하고 분석하지 않고도 일반 웹 브라우저를 쉽게 가장할 수 있습니다.
참고로, 다음은 Cloudflare가 이러한 종류의 페이지에 사용하는 기본 메시지입니다:``` Checking your browser before accessing website.com.
This process is automatic. Your browser will redirect to your requested content shortly.
Please allow up to 5 seconds...
cloudscraper를 사용하는 모든 스크립트는 Cloudflare의 봇 방지 기능이 활성화된 사이트를 처음 방문할 때 약 5초간 대기하지만, 첫 번째 요청 이후에는 지연이 발생하지 않습니다.
# 설치
간단히 `pip install cloudscraper`를 실행하세요. PyPI 패키지는 https://pypi.org/project/cloudscraper/ 에 있습니다.```bash
pip install cloudscraper
또는 이 저장소를 클론한 후 python setup.py install을 실행하세요.
이전에 원래 cloudscraper 패키지를 사용하고 있었다면, 이제 이 향상된 버전을 직접 사용할 수 있습니다:```python
import cloudscraper # Enhanced version
The API는 계속 호환되므로 코드에서 import 문만 변경하면 됩니다. 모든 함수 호출과 매개변수는 동일하게 작동합니다.
### 코드베이스 구조
코드베이스는 유지보수성을 높이고 혼란을 줄이기 위해 간소화되었습니다:
- **단일 모듈**: 모든 코드는 이제 `cloudscraper` 모듈에 있습니다.
- **중복 제거**: 중복 디렉터리가 제거되었습니다.
- **테스트 업데이트**: 모든 테스트 파일이 `cloudscraper` 모듈을 사용하도록 업데이트되었습니다.
이로써 코드베이스가 더 깔끔해지고 유지보수가 쉬워지며, 기존 API를 사용하는 기존 코드와의 하위 호환성도 보장됩니다.
## cloudscraper의 주요 기능
| 기능 | 설명 | 상태 |
|---------|-------------|--------|
| **🆕 실행 파일 호환성** | PyInstaller, cx_Freeze, auto-py-to-exe 변환에 대한 완전한 수정 | ✅ **수정 완료** |
| **🆕 v3 JavaScript VM 챌린지** | Cloudflare의 최신 JavaScript VM 기반 챌린지 지원 | ✅ **신규** |
| **🆕 Turnstile 지원** | Cloudflare의 새로운 Turnstile CAPTCHA 대체 지원 | ✅ **신규** |
| **최신 챌린지 지원** | v1, v2, v3 및 Turnstile Cloudflare 챌린지에 대한 향상된 지원 | ✅ 완료 |
| **프록시 로테이션** | 여러 전략을 사용하는 내장형 스마트 프록시 로테이션 | ✅ 향상됨 |
| **스텔스 모드** | 탐지를 피하기 위한 인간과 유사한 행동 시뮬레이션 | ✅ 향상됨 |
| **브라우저 에뮬레이션** | Chrome 및 Firefox를 위한 고급 브라우저 핑거프린팅 | ✅ 안정적 |
| **JavaScript 처리** | 챌린지 해결을 위한 더 나은 JS 인터프리터(기본값 js2py) | ✅ 향상됨 |
| **CAPTCHA 솔버** | 여러 CAPTCHA 해결 서비스 지원 | ✅ 안정적 |
# 의존성
- **Python 3.8+** (Python 3.6 및 3.7 지원 중단)
- **[Requests](https://github.com/psf/requests)** >= 2.31.0
- **[requests_toolbelt](https://pypi.org/project/requests-toolbelt/)** >= 1.0.0
- **[pyparsing](https://pypi.org/project/pyparsing/)** >= 3.1.0
- **[pyOpenSSL](https://pypi.org/project/pyOpenSSL/)** >= 24.0.0
- **[pycryptodome](https://pypi.org/project/pycryptodome/)** >= 3.20.0
- **[websocket-client](https://pypi.org/project/websocket-client/)** >= 1.7.0
- **[js2py](https://pypi.org/project/Js2Py/)** >= 0.74
- **[brotli](https://pypi.org/project/Brotli/)** >= 1.1.0
- **[certifi](https://pypi.org/project/certifi/)** >= 2024.2.2
`python setup.py install`은 Python 의존성을 자동으로 설치합니다. 직접 설치해야 하는 것은 사용자가 선택한 Javascript 인터프리터 및/또는 엔진뿐이며, 기본값으로 요구 사항에 포함된 js2py는 제외됩니다.
# Javascript 인터프리터 및 엔진
우리는 다음 Javascript 인터프리터/엔진을 지원합니다.
- **[ChakraCore](https://github.com/microsoft/ChakraCore):** 라이브러리 바이너리는 [여기](https://www.github.com/VeNoMouS/cloudscraper/tree/ChakraCore/)에서도 확인할 수 있습니다.
- **[js2py](https://github.com/PiotrDabkowski/Js2Py):** >=0.74 **(향상된 버전의 기본값)**
- **native**: 자체 제작 네이티브 python 솔버
- **[Node.js](https://nodejs.org/)**
- **[V8](https://github.com/sony/v8eval/):** Sony의 [v8eval](https://v8.dev)() python 모듈을 사용합니다.
# 사용법
cloudscraper를 사용하는 가장 간단한 방법은 `create_scraper()`를 호출하는 것입니다.```python
import cloudscraper
scraper = cloudscraper.create_scraper() # returns a CloudScraper instance
# Or: scraper = cloudscraper.CloudScraper() # CloudScraper inherits from requests.Session
print(scraper.get("http://somesite.com").text) # => "<!DOCTYPE html><html><head>..."
그게 전부입니다...
이 세션 객체에서 Cloudflare 안티봇으로 보호되는 웹사이트로 보내는 모든 요청은 자동으로 처리됩니다. Cloudflare를 사용하지 않는 웹사이트는 정상적으로 처리됩니다. 추가로 구성하거나 호출할 필요가 없으며, 모든 웹사이트를 어떤 보호 장치도 없는 것처럼 취급할 수 있습니다.
cloudscraper는 Requests를 사용하는 것과 정확히 동일한 방식으로 사용합니다. cloudScraper는 Requests Session 객체와 동일하게 작동합니다. 단지 requests.get() 또는 requests.post()를 호출하는 대신 scraper.get() 또는 scraper.post()를 호출하면 됩니다.
자세한 내용은 Requests 문서를 참조하세요.
cloudscraper를 사용하는 Python 애플리케이션을 실행 파일로 변환할 때 발생하던 user agent 문제가 완전히 해결되었습니다!
Python 앱을 실행 파일로 변환할 때(PyInstaller, cx_Freeze, auto-py-to-exe 등 사용) browsers.json 파일이 제대로 포함되지 않아 user agent 또는 agent_user 기능과 관련된 오류가 발생했습니다.
cloudscraper v2.7.0에는 자동 폴백 시스템이 포함되어 있습니다:
옵션 1: 실행 파일을 그냥 빌드하세요 (자동으로 작동합니다):```bash pyinstaller your_app.py
**옵션 2: 전체 사용자 에이전트 데이터베이스 포함** (권장):```bash
pyinstaller --add-data "cloudscraper/user_agent/browsers.json;cloudscraper/user_agent/" your_app.py
모든 실행 파일 호환성이 철저히 테스트되었습니다:``` ✅ Normal operation with browsers.json ✅ Fallback operation without browsers.json ✅ PyInstaller environment simulation ✅ All browser/platform combinations ✅ HTTP requests with fallback user agents
Your cloudscraper 애플리케이션이 이제 실행 파일로 변환되어도 완벽하게 작동합니다! 🎉
## 🆕 Cloudflare v3 JavaScript VM 챌린지 지원
### v3 챌린지란 무엇인가요?
Cloudflare v3 챌린지는 봇 보호 기술의 최신 진화를 나타냅니다. 기존의 v1 및 v2 챌린지와 달리 v3 챌린지는:
- **JavaScript 가상 머신에서 실행**: 챌린지는 샌드박스 처리된 JavaScript 환경에서 실행됩니다.
- **고급 탐지 사용**: 자동화된 행동을 감지하는 더 정교한 알고리즘
- **동적 코드 생성**: 챌린지 코드는 동적으로 생성되어 리버스 엔지니어링이 더 어렵습니다.
- **최신 보호 제공**: Cloudflare의 가장 최신 안티봇 기술
### 기본 v3 사용법```python
import cloudscraper
# v3 support is enabled by default
scraper = cloudscraper.create_scraper()
response = scraper.get("https://example.com")
print(response.text)
import cloudscraper