이 블로그 글에서는 다음을 확인하실 수 있습니다:
- 아마존 CAPTCHA란 무엇이며 어떻게 작동하는가
- 이를 우회하는 세 가지 다른 방법
- 이 기술들의 종합 비교
시작해 보겠습니다!
아마존 CAPTCHA: 소개
우회 방법을 배우기 전에, 아마존 CAPTCHA가 무엇이며 특정 페이지에 표시되는 이유를 이해하세요.
정의
Amazon CAPTCHA는 자동화 스크립트로 Amazon 페이지를 방문하거나 사이트에서 자동화된 상호작용을 수행할 때 나타나는 봇 방지 조치입니다. 대부분의 경우 화면에 표시된 문자를 입력해야 하는 간단한 텍스트 기반 CAPTCHA 형태로 나타납니다:

위와 같은 검증은 간단해 보일 수 있지만, 대부분의 전자상거래 웹 스크래핑 스크립트를 차단하기에 충분합니다. 다행히도 이는 시장에서 가장 진보된 CAPTCHA는 아니며, 우회할 수 있는 방법이 분명히 존재합니다.
언제 표시되는가
여기서 까다로운 점은… 아마존 CAPTCHA가 고정된 시나리오나 브라우저 구성에서만 나타나는 것이 아니라는 점입니다. 때로는 마주칠 수도 있고, 다른 때는 나타나지 않을 수도 있습니다.
테스트 결과, 셀레니움(Selenium), 퍼피티어(Puppeteer), 플레이라이트(Playwright) 같은 자동화 도구를 사용할 때 CAPTCHA가 가장 자주 발생하는 상황은 다음과 같습니다:
- 아마존 상품 페이지 직접 방문
- 자동화된 검색 수행
- 로그인 또는 가입 시도
그러나 이러한 행동이 반드시 CAPTCHA 도전을 유발한다는 보장은 없다는 점을 유의해야 합니다. 이런 동작이 좋은 현상이라고 생각할 수 있지만, 사실 그렇지 않습니다! 아마존 스크래퍼가 완벽하게 작동한다고 착각하게 될 수 있는데, 갑자기 아무런 이유 없이 차단되기 시작할 수 있습니다.
예를 들어, 아래와 같은 간단한 Selenium 스크립트는 문제없이 작동할 수도 있고, CAPTCHA를 유발할 수도 있습니다:
# pip install selenium
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
# 브라우저를 헤드리스 모드로 실행하도록 구성
options = Options()
options.add_argument("--headless")
# Chrome 제어용 WebDriver 초기화
driver = webdriver.Chrome(service=Service(),options=options)
# 대상 페이지(Amazon Kindle 제품 페이지) 접속
driver.get("https://www.amazon.com/Amazon-Kindle/dp/B0CNV9F72P")
# 전체 페이지 스크린샷 캡처
driver.save_screenshot("product-page.png")
# 추가 스크래핑 로직...
# 드라이버 리소스 해제
driver.quit()
성공적으로 실행되면 스크립트는 이 스크린샷을 생성합니다:

반면, 실패 시에는 다음과 같은 결과가 생성됩니다:

CAPTCHA의 예측 불가능한 출현 방식은 일관되게 인증을 유발하는 신뢰할 수 있는 자동화 로직 개발을 어렵게 만듭니다. 이로 인해 연구 역시 까다롭습니다. 다행히도, 이는 CAPTCHA 우회가 불가능하다는 의미는 아닙니다.
이제 그 방법을 배워볼 시간입니다!
아마존 CAPTCHA 우회: 3가지 기법
이 장에서는 아마존 CAPTCHA를 해결하기 위한 세 가지 다른 접근법을 살펴보겠습니다:
- 스텔스 브라우저 사용
- AI 활용
- 캡차 솔버 활용
다른 방법에 대해서는 Python에서 CAPTCHA 우회 방법 가이드를 참조하세요.
자, 시작해 보겠습니다!
방법 #1: 스텔스 브라우저 사용
아마존을 이용하다 CAPTCHA를 마주친 적이 얼마나 되나요? 아마 거의 보지 못했거나 전혀 보지 못했을 것입니다. 이는 실제 인간 사용자가 아마존의 봇 방지 및 스크래핑 방지 시스템에 크게 영향을 받지 않음을 시사합니다.
대부분의 경우와 마찬가지로, 사후 대응보다 예방이 더 효과적입니다. 여기서 목표는 CAPTCHA를 해결하려는 것이 아니라 아예 발생하지 않도록 하는 것입니다. 어떻게 할까요? 아마존 웹 페이지와 상호작용할 때 브라우저 자동화 로직을 실제 인간 사용자와 최대한 유사하게 구성하는 것입니다.
이 목표는 자동화 관련 브라우저 설정을 수정하여 정보 유출을 방지하고 봇 탐지를 줄이는 스텔스 플러그인이 탑재된 브라우저를 사용함으로써 달성할 수 있습니다. 이를 위한 대표적인 도구로는 다음과 같습니다:
- SeleniumBase: Selenium의 봇 탐지를 우회하는 내장형 스텔스 기능을 갖춘 Python 기반 자동화 프레임워크.
- Playwright Stealth: 안티봇 시스템의 탐지를 회피하기 위해 브라우저 설정을 수정하는 Playwright Extra 플러그인입니다.
- Puppeteer Stealth: 브라우저 지문을 조정하여 더 인간처럼 보이도록 하는 Puppeteer Extra 플러그인입니다.
undetected-chromedriver: 봇 방지 메커니즘의 탐지를 우회하는 데 도움을 주는 패치된 Selenium WebDriver입니다.
이 섹션에서는 Python과 완벽하게 호환되는 SeleniumBase에 집중하겠습니다. 어쨌든 다른 옵션들도 쉽게 사용할 수 있습니다.
SeleniumBase 설치 방법:
pip install seleniumbase
그런 다음, 이전 Selenium 스크립트를 아래와 같이 SeleniumBase를 사용하도록 수정할 수 있습니다:
from seleniumbase import Driver
# SeleniumBase 드라이버 초기화
driver = Driver(uc=True) # 스텔스 모드 활성화
# 대상 Amazon 페이지 연결
driver.get("https://www.amazon.com/Amazon-Kindle/dp/B0CNV9F72P")
# 전체 페이지 스크린샷 캡처
driver.save_screenshot("product-page.png")
# 추가 스크래핑 로직...
# 드라이버 리소스 해제
driver.quit()
훌륭합니다! 아마존 CAPTCHA를 마주칠 가능성이 크게 줄었습니다.
접근법 #2: AI로 해결하기
아마존 CAPTCHA 모음을 보면 AI가 이를 해결하지 못할 거라고 믿기 어렵습니다:

결국 기본적인 문자 인식 문제는 오늘날 시장에서 발견되는 더 진보되고 복잡한 CAPTCHA에 비해 구식처럼 보입니다:

따라서 여기서의 아이디어는 다음과 같습니다:
- CAPTCHA 페이지의 스크린샷을 찍고
- ChatGPT나 다른 AI 모델에 입력하기
- AI의 응답을 받아 CAPTCHA를 해결하는 데 활용하기
CAPTCHA HTML을 살펴보면 텍스트 입력 필드가 .a-span12 CSS 선택자로 선택 가능함을 알 수 있습니다. 이 정보를 바탕으로 다음과 같은 접근법으로 AI를 활용해 Amazon CAPTCHA를 우회할 수 있습니다:
import os
import time
import base64
from openai import OpenAI
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
def solve_amazon_captcha(driver, timeout=5):
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
captcha_elements = driver.find_elements(By.CSS_SELECTOR, "a-span12")
# CAPTCHA가 감지된 경우
if len(captcha_elements) > 0:
print("CAPTCHA 감지됨!")
# CAPTCHA 페이지 스크린샷 촬영
driver.maximize_window()
screenshot_path = "captcha.png"
driver.save_screenshot(screenshot_path)
print("CAPTCHA 해결 시도 중...")
# CAPTCHA 해결을 위해 AI에 스크린샷 입력
base64_image = encode_image(screenshot_path)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "이 CAPTCHA에서 텍스트를 추출하세요. 텍스트만 반환해 주세요."},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{base64_image}"}},
],
}
],
)
# CAPTCHA 텍스트 가져오기
captcha_text = response.choices[0].message.content.strip()
# CAPTCHA 입력 텍스트 선택 및 AI 생성 텍스트로 채우기
# input_element = captcha_elements[0]
input_element.send_keys(captcha_text, Keys.ENTER)
print("CAPTCHA 해결!")
print(f"페이지 재로딩을 위해 {timeout}초까지 대기 중...")
# 페이지 재로딩을 위해 최대 5초 대기
time.sleep(timeout)
solve_amazon_captcha() 함수가 작동하도록 openai 종속성을 설치하세요:
pip install openai
또한 OpenAI API 키를 OPENAI_API_KEY라는 전역 환경 변수로 설정하세요.
AI 기반 CAPTCHA 해결 함수를 호출하는 방법은 다음과 같습니다:
driver = webdriver.Chrome()
driver.get("https://www.amazon.com/Amazon-Kindle/dp/B0CNV9F72P")
solve_amazon_captcha(driver)
driver.quit()
이제 스크립트가 실제 사용자와 동일하게 CAPTCHA를 해결합니다.
Gemini를 사용하는 유사한 접근법은 GitHub의 Genaptcha 프로젝트를 참고하세요.
접근법 #3: CAPTCHA 해결기 통합
이미지로 인해 토큰 소모가 발생하여 비용이 발생할 수 있는 AI 모델 호출을 최소화하면서 최고의 정확도를 달성하려면, 앞서 언급한 두 가지 해결책을 결합하여 다음을 수행해야 합니다:
- 아마존에서 CAPTCHA 발생 빈도 감소
- 실제로 나타날 때만 해결하기
그러나 하이브리드 방식에는 다음과 같은 고유한 과제가 따릅니다:
- 추가 의존성: 스텔스 브라우저 자동화 도구, OpenAI 클라이언트, 적절한 환경 구성이 필요합니다.
- 불안정성: 스텔스 플러그인은 오늘 작동하더라도 봇 개발자와 반봇 솔루션 간의 지속적인 경쟁으로 인해 내일은 효과가 없을 수 있습니다. 따라서 라이브러리를 최신 상태로 유지하는 것이 필수적입니다. 또한 LLM 모델은 때때로 일관성 없는 결과를 생성하여 추가 문제를 야기할 수 있습니다. 또한 AI는 아마존이 가까운 시일 내에 도입할 가능성이 높은 더 복잡한 CAPTCHA를 해결하는 데 어려움을 겪습니다.
- 재시도 로직 필요: CAPTCHA가 실제로 해결되었는지 확인하려면 AI 실패 시 재시도 메커니즘을 구현해야 합니다.
- 처리 지연: AI는 상당한 처리 지연을 초래합니다. 게다가 CAPTCHA가 나타나고 사라질 때까지 기다리는 과정이 자동화/스크래핑 프로세스를 더욱 느리게 만듭니다.
- 유지보수 부담: 선택한 모든 기술이 제대로 구성되고 시간이 지나도 계속 작동하도록 책임져야 합니다.
CAPTCHA 솔버를 사용하는 것이 더 쉬울까요? 물론입니다. 특히 선택한 브라우저 자동화 도구가 제어하는 헤드리스 브라우저에 이 기능이 직접 내장되어 있다면 더욱 그렇습니다.
Scraping Browser가 제공하는 경험이 바로 이것입니다. 인프라 관리의 필요성을 없애면서 최대 성능을 발휘하도록 설계된 웹 스크래핑에 최적화된 클라우드 기반 브라우저입니다. 이 특수 브라우저는 IP 로테이션, 자동 재시도, 고급 봇 방지 우회 메커니즘, 그리고 물론 내장된 CAPTCHA 해결 기능을 갖추고 있습니다.
문서에서 다른 브라우저와 마찬가지로 Selenium, Playwright, Puppeteer와 쉽게 통합하는 방법을 확인하세요.
아마존 CAPTCHA를 뚫는 최상의 방법
본 문서에서 살펴본 아마존 CAPTCHA 기술 요약:
| 접근 방식 | CAPTCHA 우회 | CAPTCHA 해결 | 유지 관리 | 수동 논리 | 비용 |
|---|---|---|---|---|---|
| 스텔스 브라우저 | ✔️ | ❌ | 필수 | 필수 | 무료 |
| AI 해결 | ❌ | ✔️ | 필수 | 필수 | 💲 |
| CAPTCHA Solver | ✔️ | ✔️ | 클라우드에서 실행되므로 필요 없음 | 필요 없음, 모든 기능이 도구에 통합됨 | 💲 |
다음은 각 접근 방식의 장단점 요약입니다.
접근법 #1: 스텔스 브라우저 사용
👍 장점:
- 무료이며 오픈 소스입니다
👎 단점:
- CAPTCHA 회피, 우회 아님
- 패치된 브라우저에 의존하여 불안정할 수 있음
- 지속적인 유지 관리 필요
접근법 #2: AI로 해결하기
👍 장점:
- 텍스트 기반 CAPTCHA를 효과적으로 해결할 수 있음
👎 단점:
- 결과가 일관되지 않으며 복잡한 CAPTCHA에는 효과적이지 않음
- 페이지에서 CAPTCHA를 감지하는 것이 까다로울 수 있음
- AI 호출에 비용이 발생함
접근법 #3: CAPTCHA 솔버 통합
👍 장점:
- 매우 효과적
- 모든 브라우저 자동화 도구 또는 HTTP 클라이언트와 원활하게 작동
- 재시도 로직, 브라우저 설정 또는 기타 수동 작업 불필요
👎 단점:
- 프리미엄 서비스
결론
이 블로그 글에서는 아마존이 왜 CAPTCHA로 접근을 차단하는지, 그리고 스크래핑 스크립트에서 이를 처리하는 방법을 알아보았습니다. 안타깝게도 CAPTCHA의 출현 방식은 일관성이 없어 연구하기 어렵습니다. 다행히 CAPTCHA를 회피하거나 우회하는 몇 가지 기술이 있으며, 여기서는 가장 유용한 세 가지를 살펴보겠습니다.
앞서 논의한 바와 같이 가장 효과적인 접근 방식은 내장형 CAPTCHA 해결 기능을 제공하며 Selenium, Playwright, Puppeteer와 원활하게 통합되는 Bright Data의 스크래핑 브라우저를 사용하는 것입니다.
더 간단한 솔루션을 원하신다면 다른 옵션도 고려해 보세요:
- Amazon CAPTCHA Solver: 웹 언락커(Web Unlocker)로 지원되는 아마존 전용 CAPTCHA 솔버입니다.
- Amazon Scraper: Amazon 페이지 전용 스크래핑 엔드포인트입니다. 호출만 하면 원하는 형식으로 이미 파싱된 데이터를 얻을 수 있습니다.
- Amazon Datasets: 관심 있는 데이터가 포함된 즉시 사용 가능한 데이터셋입니다. 스크래핑이 필요 없습니다.
지금 바로 무료 Bright Data 계정을 생성하고 무료 체험으로 스크래핑 솔루션과 데이터셋을 탐색해 보세요.