FlareSolverr 가이드: Cloudflare 스크래핑 및 우회

FlareSolverr를 신속하게 설정하여 Cloudflare를 우회하고 웹 스크래핑 워크플로를 간소화하세요.
3 분 읽기
FlareSolverr to Bypass Cloudflare blog image

FlareSolverr는Cloudflare챌린지와DDoS-Guard보호를 우회하는 오픈 소스 도구입니다. 요청을 위한 프록시 서버를 설정하고, 보안 검사를 통과하기 위해 Chrome 브라우저를 모방하며, 사이트 콘텐츠를 표시합니다.

이 글에서는 FlareSolverr 설정 방법과 웹 스크래핑을 위한 도구 구성법을 배울 수 있습니다. 또한 웹사이트 보안 도전을 우회하는 몇 가지 옵션도 살펴보게 됩니다.

FlareSolverr 구현

FlareSolverr는 여러설치 방법을 제공합니다. 그러나 일관된 구현을 위해 Docker 사용을 권장합니다. Docker 컨테이너 내에 모든 종속성과 구성을 패키징하기 때문입니다.

Docker를 사용한 FlareSolverr 설정

장치에Docker가 설치된상태에서DockerHub,GitHub 레지스트리커뮤니티 업데이트저장소에서 최신 FlareSolverr 버전을 다운로드하세요. 다음 셸 명령어로 최신 FlareSolverr Docker 이미지를 가져옵니다:

docker pull 21hsmw/flaresolverr:nodriver

docker image ls 명령어를 실행하여 시스템에 이미지가 있는지 확인할 수 있습니다:

Image list

FlareSolverr는 기기에서 프록시 서버로 실행되므로, 서비스 제공 및 접근이 가능한 포트를 정의해야 합니다. 다음 명령어는 FlareSolverr 포트를 8191로 설정하고 서비스용 컨테이너를 생성합니다:

docker run -d --name flaresolverr -p 8191:8191 21hsmw/flaresolverr:nodriver

Docker 실행 시환경 변수를구성할 수도 있습니다. FlareSolverr는 서버 내 로깅 및 모니터링 옵션, 사용 시간대 및 언어, 서버와 함께 사용할CAPTCHA 해결기메커니즘 등을 제공합니다. 본 튜토리얼에서는 기본 Docker 설정으로 충분합니다.

브라우저에서 http://localhost:8191에 접속하여 FlareSolverr가 실행 중인지 확인하세요:

FlareSolverr up and running

필수 구성 요소 준비

이 튜토리얼은Python환경을 기준으로 제작되었습니다. FlareSolverr 및 Docker 설치 외에도 Beautiful Soup과 같은 특정 Python 패키지를 설치해야 할 수 있습니다.

BeautifulSoup을 이용한 웹 스크래핑에 대한 자세한 내용은 여기에서 확인하세요.

FlareSolverr로 데이터 스크래핑하기

참고: 스크래핑하는 모든 웹사이트의 이용 약관을 항상 준수하십시오. 공개적으로 이용 가능한 데이터의 책임 있는 사용은 IP 차단 및 기타 법적 조치로 강제될 수 있습니다.

FlareSolverr를 이용한 스크래핑은 일반적인 스크래핑 과정과 매우 유사합니다. 단, 대상 웹사이트와 요청 매개변수가 FlareSolverr 서버로 전송된다는 점이 다릅니다. 서버는 웹사이트 매개변수를 기반으로 브라우저 인스턴스를 생성하고, Cloudflare 인증 절차가 통과될 때까지 대기한 후 사이트 콘텐츠를 사용자에게 반환합니다.curl 실행,Python 스크립트, 타사 프로그램을 통해 FlareSolverr 서버에 요청을 보낼 수 있습니다.

웹사이트가 Cloudflare로 보호되는지 확인하려면 HTML 코드, 헤더 또는 DNS 레코드를조회하여Cloudflare 관련 참조가 있는지 확인하면 됩니다.Check for Cloudflare와 같은 타사 도구도 사용할 수 있습니다:

Check for Cloudflare

Python으로 FlareSolverr 프로세스를 테스트해 보겠습니다. 환경에 Python 파일을 생성하고 다음 스크립트를 복사하세요. 이 샘플 스크립트는 Cloudflare로 보호된 웹사이트의 HTML 콘텐츠를 가져옵니다:

# Requests 파이썬 라이브러리 임포트
import requests

# 요청 실행을 위한 페이로드 정의
url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
data = {
    "cmd": "request.get",
    "url": "https://www.datanearme.co/",
    "maxTimeout": 60000
}

# 페이로드 구성 및 요청 호출
response = requests.post(url, headers=headers, json=data)

# 요청 코드 출력
print("Status:", response.json().get('status', {}))
print("Status Code:", response.status_code)
print("FlareSolverr message:", response.json().get('message', {}))

이 스크립트는 Temu 웹사이트를 스크래핑하기 위해 FlareSolverr 서버에 요청을 보냅니다. FlareSolverr는 대상 웹사이트에서 Cloudflare 챌린지를 감지하고, 이를 해결한 후 HTML 콘텐츠와 세션 정보를 반환합니다.

Python 스크립트를 실행하려면 CLI 명령어 python3 <스크립트명>.py를 사용할 수 있습니다:

Scraping execution

Cloudflare 챌린지 발생 여부는 사용자의 IP 주소와 접속 대상 웹사이트가 적용한 보안 조치에 따라 달라질 수 있습니다.

Cloudflare 챌린지를 우회하면 Beautiful Soup 또는 기타 Python 라이브러리를 사용하여 HTML 콘텐츠를 정상적으로 파싱할 수 있습니다.

Python 패키지가 환경에 설치되어 있는지 확인하세요.pip패키지 관리자를 사용하여pip install bs4 명령어로 설치할 수 있습니다.

스크래핑 과정을 살펴보겠습니다. 필요한 정보에 대한 올바른 HTML 태그를 먼저 확보하세요. 다음은 기사 제목과 저자 이름입니다:

Inspecting website

해당 정보를 바탕으로 태그를 활용해 데이터를 파싱하는 스크립트를 작성할 수 있습니다:

# 파이썬 라이브러리 임포트
import requests
from bs4 import BeautifulSoup

# 요청 실행을 위한 페이로드 정의
url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
data = {
    "cmd": "request.get",
    "url": "https://www.datanearme.co/",
    "maxTimeout": 60000
}

# 페이로드 구성 및 요청 호출
response = requests.post(url, headers=headers, json=data)

# 요청 코드 출력
print("Status:", response.json().get('status', {}))
print("Status Code:", response.status_code)
print("FlareSolverr 메시지:", response.json().get('message', {}))

# 파싱 로직
page_content = response.json().get('solution', {}).get('response', '')
soup = BeautifulSoup(page_content, 'html.parser')

# class 'space-y-3'을 가진 div 찾기
target_div = soup.find('div', class_='space-y-3')

# 기사 작성자
spans = target_div.find_all('span')
span_element = spans[-1]
span_text = span_element.get_text(strip=True)

# 기사 제목
h2_element = target_div.find('h2', class_=['font-semibold', 'font-poppins'])
h2_text = h2_element.get_text(strip=True)
print(f"기사 작성자: ",span_text, " 기사 제목: ", h2_text)

이 스크립트는 사이트의 Cloudflare 도전을 우회하여 HTML 콘텐츠를 반환한 후, 원하는 정보를 추출하기 위해 Beautiful Soup으로 파싱합니다.

업데이트된 Python 파일을 CLI 명령어 python <스크립트명>.py로 실행하세요:

Execution results

FlareSolverr는 스크래핑 프로세스에 통합 가능하며 복잡한 사용 사례에 맞게 확장 가능한 유연한 도구입니다. 지역별 차단 및 제한이 있는 웹사이트의 경우 FlareSolverr의 프록시 지원 기능을 활용할 수도 있습니다. 다음 섹션에서 그 작동 방식을 살펴보겠습니다.

FlareSolverr에서 프록시 사용하기

웹 스크래핑 전략에 프록시를 활용하면 효율성이 향상되고 지속 가능한 스크래핑이 가능해집니다. 프록시를 사용하면 지역적 제한과 IP 차단을 피하고 웹 신원을 숨겨 익명성을 높일 수 있습니다. 또한 프록시는 동시 요청을 통해 스크래핑 작업의 확장성을 직접 지원하여 속도 제한 내에서 운영할 수 있게 합니다. 프록시의 품질에 따라 요청이 실제 사용자 행동을 더 잘 모방하여 웹사이트 모니터링 시스템에 합법적으로 보일 수 있습니다.

사용 목적과 기능에 따라모바일 프록시,주거용 프록시,데이터센터프록시를 선택할 수 있습니다. 모바일 프록시는 통신사가 할당한 실제 IP 주소를 활용하여 트래픽을 이동통신사 네트워크(3G, 4G, 5G)로 라우팅합니다. 수천 명의 사용자가 서로 다른 시간에 동일한 IP를 공유하기 때문에 이 프록시 유형은 특정 사용자에게 귀속시키기 어렵고, CAPTCHA, Cloudflare 또는 기타 보안 문제를 유발할 가능성이 낮습니다. 그러나 비용이 비싸고 다른 프록시 유형보다 속도가 느릴 수 있습니다.

주거용 프록시는 실제 사용자 IP를 활용하는 또 다른 프록시 유형으로, 스크래핑 행위를 더 효과적으로 위장할 수 있습니다. 비용은 높지만 모바일 프록시처럼 특정 사용자 익명성을 보장하지는 않습니다. 즉, 과도한 사용이나 의심스러운 행동으로 인해 주거용 IP가 차단될 수 있습니다. 지역 제한 및 모니터링 우회에 가장 적합합니다. 데이터 센터 프록시는 ISP와 연관되지 않은 클라우드 또는 데이터 서버 프록시입니다. 저비용으로 고속, 저지연 연결을 제공하므로 대량 스크래핑에 최적입니다. 실제 사용자 행동을 모방하는 능력이 낮아 웹사이트의 보안 검증 및 속도 제한 기능에 의해 차단될 가능성이 높습니다.

FlareSolverr 요청에 프록시를 추가하려면 요청 페이로드에 명시하세요.무료 공개 프록시는온라인에서 이용 가능하지만, 안정성이 요구되는 실제 운영 환경에서는관리형 프록시 서비스가더 나은 선택입니다.

다음 예제 스크립트는 BrightData의 회전 프록시를 FlareSolverr 요청에 연결합니다:

import requests
import random

proxy_list = [
    '185.150.85.170',
    '45.154.194.148',
    '104.244.83.140',
    '58.97.241.46',
    '103.250.82.245',
    '83.229.13.167',
]

proxy_ip = random.choice(proxy_list)

proxies = {
   'http': f'http://{proxy_ip}',
   'https': f'https://{proxy_ip}',
}

payload = {
        "cmd": "request.get",
        "url": "https://www.datanearme.co/",
        "maxTimeout": 60000
}

response = requests.post(url, headers=headers, json=data, proxies=proxies)
print("Status Code:", response.status_code)

실제 운영 환경에서는 더 큰 프록시 목록을 유지하고, 각 요청 전에 이를 순환하여 웹 스크래핑 시 프록시 선택이 순환되도록 할 수 있습니다.

세션 관리 및 쿠키 처리

Cloudflare는 웹사이트 내 사용자 트래픽에쿠키를생성하여 첨부합니다. 이는 트래픽을 관리하고 개별 요청마다 네트워크 자원을 독점하지 않으면서 반복적인 악성 요청으로부터 보호하는 데 도움이 됩니다. FlareSolverr는 응답 JSON 내에서 쿠키 데이터를 수집하여 전달하며, 이는 매 요청마다 개별 Cloudflare 챌린지를 해결하는 대신 후속 요청을 검증할 수 있게 합니다:

Cloudflare cookie

FlareSolverr는 여러 요청 간 일관성 향상을 위한 세션 처리 기능을 제공합니다. 세션이 생성되면 해당 브라우저 인스턴스에서 세션이 종료될 때까지 모든 쿠키를 유지합니다. 이를 통해 스크래핑 요청의 확장성과 응답 속도를 개선할 수 있습니다.

다음 코드는 스크립트 내에서 세션을 생성하는 방법을 보여줍니다:

import requests

url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
data = {
    "cmd": "sessions.create",
    }

response = requests.post(url, headers=headers, json=data)
print(response.text)

요청 페이로드의 명령어가requests.get 대신sessions.create로변경되었습니다. 이 명령어에는url값이 필요하지 않지만, 세션에 프록시를 설정할 수 있습니다.세션 삭제(session destroy),세션 목록 조회(session list),요청 게시(post requests) 등 다른 명령어를 확인하려면 FlareSolverr명령어 구조를살펴보세요:

Session created

이후 요청에서는 페이로드에 세션 ID 값을 추가하여 사용할 수 있습니다:

url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
data = {
    "cmd": "request.get",
    "url": "https://www.datanearme.co/",
    "maxTimeout": 60000,
    "session":"<SESSION_ID>"
}
response = requests.post(url, headers=headers, json=data)
print(response.text)

타임아웃 값은 요청이 실행되는 최대 시간(초)입니다. 해당 시간 내에 응답이 오지 않으면 오류 응답을 받게 됩니다. 세션 생성 및 세션 ID 사용을 결합한 스크립트를 살펴보겠습니다:

import requests
import time

# 세션 생성
url = "http://localhost:8191/v1"
headers = {"Content-Type": "application/json"}
first_request = {
    "cmd": "sessions.create",
    }

first_response = requests.post(url, headers=headers, json=first_request)
session_id = first_response.json().get('session', {})

# 세션 ID 사용
second_request = {
    "cmd": "request.get",
    "url": "https://www.datanearme.co/",
    "maxTimeout": 60000,
    "session":f"{session_id}"
}
second_response = requests.post(url, headers=headers, json=second_request)
print("Status:", second_response.json().get('status', {}))

모든 Python 스크립트는 이GitHub 저장소에서 확인할 수 있습니다.

FlareSolverr로 요청을 보내고 응답을 해석하는 방법을 살펴보았지만, 실패를 처리하는 방법을 이해하는 것 또한 중요합니다.

FlareSolverr 요청 문제 해결

Cloudflare는 프로토콜을 자주 업데이트하며, 웹사이트와 사용 사례의 차이로 인해 예상치 못한 동작이 발생할 수 있습니다. 이 섹션에서는 일반적인 오류, FlareSolverr의 처리 방식, 문제 해결 방법을 다룹니다.

스크래핑 요청 문제해결을위해 항상 다음부터 시작해야 합니다:

  • FlareSolverr 로그

다음은 몇 가지 구체적인 오류와 해결 방법입니다:

  • 반복적인 챌린지/CAPTCHA 실패: 사이트에서 요청을 의심스러운 것으로 표시했을 수 있습니다. 실제 사용자 행동을 더 가깝게 모방하도록 요청을 조정하고 프록시를 전환하세요. 쿠키가 만료될 수도 있으므로 요청 세션을 유지하면서 정기적으로 새로 고침을 수행하세요.
  • 도전 과제 미탐지오류:도전 과제가 존재하지 않거나, FlareSolverr와 호환되지 않는 인식 불가 보안 조치가 적용되었거나, FlareSolverr 구버전을 사용 중이거나, 도전 과제가의도적으로 숨겨진 경우 발생할 수 있습니다. 도전 과제가 감지되지 않아도 원하는 콘텐츠를 얻을 수 있지만, 작동하지 않는 경우 FlareSolverr 버전을 업데이트하고 재테스트하여 문제를 정확히 파악해 보십시오.
  • FlareSolverr에서 제공된 쿠키가 유효하지 않음 오류: FlareSolverr가 반환한 쿠키가 제대로 작동하지 않을 때 발생하는 오류입니다. 특히 VPN 사용 시 Docker와 FlareSolverr 간 IP 또는 네트워크 불일치로 인해 자주 발생합니다.

여기에 언급되지 않은 다른 문제가 발생하면 온라인에서 더 많은 정보를 찾을 수 있습니다. FlareSolverr 뒤에는 대규모오픈소스 커뮤니티가존재하므로, 여러분이 겪는 문제에 대한 해결책이 이미 존재할 가능성이 높습니다.

FlareSolverr 대안

FlareSolverr는 기술적 역량을 갖춘 사용자가 기반을 확장할 수 있도록 설계된 오픈소스 도구입니다. 그러나 Cloudflare의 최신 변경 사항을 항상 반영하지 못할 수 있어 시간에 민감한 작업에 영향을 미칠 수 있습니다. 2026년 1월 기준,CAPTCHA 해결 기능이작동하지 않으며 일부 사이트의Cloudflare 차단을우회하지 못하는 경우도 있습니다.

대규모 스크래핑이나 보다 강력한 Cloudflare 우회 솔루션이 필요하다면, 다음 대안들이 추가 기능과 안정성을 제공합니다:

  • 스크래핑 브라우저:스크래핑 브라우저는 자동화된 프록시 로테이션 및 내장형 CAPTCHA 해결 기능 등 웹 스크래핑을 위해 특별히 설계된 GUI 브라우저입니다.Bright Data 스크래핑 브라우저는Playwright, Puppeteer, Selenium과 같은 웹 프레임워크와의 손쉬운 통합을 제공하여, 대화형 브라우저 환경과 직접 연결된 대규모 프로그래매틱 워크플로우를 가능하게 합니다.
  • 웹 스크레이퍼 API:웹 스크레이퍼 API는 대상 도메인에 이미 통합된 프레임워크로, 수동 스크래핑 과정 없이 필요 시 데이터를 수집할 수 있습니다. 대량 데이터 호출을 처리할 수 있는 사전 구축된 데이터 구조와 아키텍처를 갖추어 사용이 간편합니다.Bright Data 웹 스크레이퍼 API는LinkedIn,Zillow,Yelp,Instagram 등 여러 인기 도메인에 연결되어 100% 규정 준수 데이터 수집을 제공합니다.
  • 주문형 데이터셋:주문형 데이터셋을 통해 즉시 사용 가능한 데이터셋을 위한 관리형 서비스를 이용할 수 있습니다. 이는 필요한 데이터를 이미 구조화 및 포맷팅된 상태로 제공하여 데이터 작업에 활용할 수 있는 수고를 덜어주는 방법입니다. Bright Data는LinkedInInstagram프로필,WalmartShein제품,Booking.com리스팅 등 다양한 인기 데이터셋을 위한 광범위한 마켓플레이스를 제공합니다. 이러한 데이터셋은 정기적으로 유지 관리 및 업데이트되며, 데이터 접근을 위한 구독 플랜이 마련되어 있습니다.
  • 관리형 스크래핑 솔루션: 마지막으로, 완전한 관리형 솔루션은 자바스크립트 렌더링, 브라우저 지문, 캡차, 지리적 위치 확인 등 대부분의 웹사이트 보안 기능을 처리하는 기능으로 스크래핑 프로세스를 간소화합니다. 예를 들어,BrightData의 Web Unlocker는모든 도메인의 접근을 해제할 수 있습니다.

결론

본 문서에서는 FlareSolverr가 Cloudflare 차단을 우회하는 방법을 살펴보았습니다. 다중 프록시 스크래핑을 위한 FlareSolverr 설정 및 여러 요청에 걸친 데이터 접근 유지 방법을 구성했습니다. 마지막으로 FlareSolverr 요청 문제 해결 방법과 발생 가능한 일반적인 오류에 대해 알아보았습니다.

일관되고 규정 준수된 데이터 수집 도구를 찾고 계시다면, 저희의 스크래핑 브라우저와 웹 스크래퍼가 스크래핑 프로세스에 최적화된 솔루션을 제공합니다. 신뢰할 수 있는 프록시, 직관적인 사용자 인터페이스, 거의 100%에 가까운 웹 스크래핑 성공률을 자랑하는 관리형 서비스를 이용하실 수 있습니다.

지금 가입하여 무료 체험을 시작하세요!