파이썬 Selenium 웹 스크래핑 완벽 가이드: 단계별 튜토리얼

최종 업데이트: May 6, 2026

웹은 더 이상 예전의 웹이 아니에요. 요즘 방문하는 거의 모든 사이트는 JavaScript로 구동되고, 콘텐츠도 즉시 불러와요. 무한 스크롤, 팝업, 몇 번이나 클릭해야 비밀이 드러나는 대시보드를 떠올리면 돼요. 실제로 하고 있어서, 정적인 HTML만 읽는 옛날식 스크래핑 도구로는 많은 가치 있는 데이터를 놓치게 돼요. 최신 이커머스 사이트에서 상품 가격을 긁어오려 했거나, 인터랙티브 지도에서 부동산 매물을 가져오려 했던 적이 있다면 그 답답함을 잘 아실 거예요. 원하는 데이터가 소스 코드에 아예 없으니까요.

바로 이럴 때 Selenium을 활용한 스크래핑이 필요해요. 오랫동안 자동화 도구를 만들고, 또 적지 않은 웹사이트를 스크래핑해 온 입장에서 말씀드리자면, 최신의 동적 데이터를 다뤄야 하는 사람에게 Selenium을 능숙하게 다루는 건 일종의 슈퍼파워예요. 이 실습형 Selenium 웹 스크래핑 튜토리얼에서는 환경 설정부터 자동화까지 핵심 단계를 차근차근 설명하고, 구조화되어 바로 내보낼 수 있는 데이터를 만들기 위해 Selenium과 를 어떻게 함께 쓰는지도 보여드릴게요. 비즈니스 분석가든, 세일즈 담당자든, 아니면 그냥 Python이 궁금한 사용자든, 실용적인 기술과 함께 조금은 웃을 거리도 얻어 가실 수 있을 거예요. XPath 선택자를 디버깅하는 일이 사람을 단련시킨다는 건 다들 아시죠.

Selenium이란 무엇이고, 웹 스크래핑에 왜 사용할까요?

selenium-dynamic-vs-static-web-scraping.png 기본부터 시작해 볼게요. 은 코드로 Chrome이나 Firefox 같은 실제 웹 브라우저를 제어할 수 있게 해주는 오픈소스 프레임워크예요. 사람처럼 페이지를 열고, 버튼을 클릭하고, 폼을 채우고, 스크롤하고, 심지어 JavaScript까지 실행할 수 있는 로봇이라고 생각하시면 돼요. 이게 중요한 이유는 대부분의 현대 웹사이트가 처음부터 모든 데이터를 한 번에 보여주지 않기 때문이에요. 대신 페이지와 상호작용한 뒤에야 콘텐츠를 동적으로 불러오는 경우가 많아요.

왜 스크래핑에서 이게 중요할까요? BeautifulSoup이나 Scrapy 같은 전통적인 도구는 정적인 HTML에는 아주 강하지만, 최초 페이지 로드 이후 JavaScript로 불러온 내용은 “볼” 수 없어요. 반면 Selenium은 페이지와 실시간으로 상호작용할 수 있어서 다음과 같은 작업에 딱 맞아요:

  • “더 보기”를 클릭해야 나타나는 상품 목록 스크래핑
  • 동적으로 업데이트되는 가격이나 리뷰 가져오기
  • 로그인 폼, 팝업, 무한 스크롤 탐색
  • 대시보드, 지도, 기타 인터랙티브 요소에서 데이터 추출

한마디로, 페이지가 완전히 로드된 뒤에야 또는 사용자의 동작 이후에 나타나는 데이터를 스크래핑해야 할 때 Selenium이 가장 먼저 떠오르는 도구예요.

Python Selenium 웹 스크래핑의 핵심 단계

Selenium으로 스크래핑하는 일은 결국 세 가지 핵심 단계로 정리돼요:

단계하는 일중요한 이유
1. 환경 설정Selenium, WebDriver, Python 라이브러리 설치도구를 준비하고 설정 스트레스를 줄이기 위해
2. 요소 찾기ID, 클래스, XPath 등으로 원하는 데이터 찾기JavaScript 뒤에 숨은 정보도 정확히 집어내기 위해
3. 데이터 추출 및 저장텍스트, 링크, 표를 가져와 CSV/Excel로 저장웹 데이터를 실제로 활용할 수 있는 형태로 바꾸기 위해

이제 각 단계를 실용적인 예제와 함께 살펴볼게요. 바로 복사해서 조금만 수정한 뒤 친구들에게 자랑할 수도 있을 거예요.

1단계: Python Selenium 환경 설정하기

가장 먼저 Selenium과 브라우저 드라이버(예: Chrome용 ChromeDriver)를 설치해야 해요. 다행히 이제는 예전보다 훨씬 쉬워졌어요.

Selenium 설치하기

터미널을 열고 아래 명령어를 실행하세요:

1pip install selenium

WebDriver 준비하기

  • Chrome: 를 다운로드하세요. Chrome 버전과 맞는지 꼭 확인하세요.
  • Firefox: 를 다운로드하세요.

팁: Selenium 4.6 이상에서는 Selenium Manager로 드라이버를 자동 다운로드할 수 있어서, 예전처럼 PATH 변수를 직접 만질 필요가 없을 수도 있어요. ()

첫 번째 Selenium 스크립트

Selenium으로 하는 간단한 “Hello World”는 이런 모습이에요:

1from selenium import webdriver
2driver = webdriver.Chrome()  # 또는 webdriver.Firefox()
3driver.get("https://example.com")
4print(driver.title)
5driver.quit()

문제 해결 팁:

  • “driver not found” 오류가 뜨면 PATH를 확인하거나 Selenium Manager를 사용해 보세요.
  • 브라우저 버전과 드라이버 버전이 일치하는지 확인하세요.
  • GUI가 없는 헤드리스 서버에서 실행 중이라면 아래의 헤드리스 모드 팁을 참고하세요.

2단계: 웹 요소를 찾아 데이터 추출하기

이제 재미있는 부분이에요. Selenium에게 어떤 데이터를 원하는지 알려주는 거죠. 웹사이트는 div, span, table 등 다양한 요소로 구성되어 있고, Selenium은 이를 찾는 여러 방법을 제공해요.

자주 쓰는 요소 찾기 방법

  • By.ID: 고유 ID가 있는 요소 찾기
  • By.CLASS_NAME: CSS 클래스 기준으로 요소 찾기
  • By.XPATH: XPath 표현식 사용하기(매우 유연하지만 깨지기 쉬울 수 있어요)
  • By.CSS_SELECTOR: CSS 선택자 사용하기(복잡한 조건에 좋음)

예시는 다음과 같아요:

1from selenium.webdriver.common.by import By
2# ID로 찾기
3price = driver.find_element(By.ID, "price").text
4# XPath로 찾기
5title = driver.find_element(By.XPATH, "//h1").text
6# CSS 선택자로 모든 상품 이미지 찾기
7images = driver.find_elements(By.CSS_SELECTOR, ".product img")
8for img in images:
9    print(img.get_attribute("src"))

팁: 항상 가장 단순하고 안정적인 선택자를 쓰세요. 우선순위는 ID > class > CSS > XPath예요. 그리고 데이터가 지연 로딩되는 페이지를 스크래핑할 때는 명시적 대기를 사용하세요:

1from selenium.webdriver.support.ui import WebDriverWait
2from selenium.webdriver.support import expected_conditions as EC
3wait = WebDriverWait(driver, 10)
4price_elem = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".price")))

이렇게 하면 데이터가 잠깐 늦게 나타나더라도 스크립트가 바로 멈추지 않아요.

3단계: 데이터 추출하고 저장하기

요소를 찾았다면 이제 데이터를 가져와서 유용한 곳에 저장할 차례예요.

텍스트, 링크, 표 추출하기

예를 들어 상품 표를 스크래핑한다고 해볼게요:

1data = []
2rows = driver.find_elements(By.XPATH, "//table/tbody/tr")
3for row in rows:
4    cells = row.find_elements(By.TAG_NAME, "td")
5    data.append([cell.text for cell in cells])

Pandas로 CSV 저장하기

1import pandas as pd
2df = pd.DataFrame(data, columns=["Name", "Price", "Stock"])
3df.to_csv("products.csv", index=False)

Excel로 저장할 수도 있고(df.to_excel("products.xlsx")), API를 사용해 Google Sheets로 바로 보낼 수도 있어요.

전체 예시: 상품 제목과 가격 스크래핑하기

1from selenium import webdriver
2from selenium.webdriver.common.by import By
3import pandas as pd
4driver = webdriver.Chrome()
5driver.get("https://example.com/products")
6data = []
7products = driver.find_elements(By.CLASS_NAME, "product-card")
8for p in products:
9    title = p.find_element(By.CLASS_NAME, "title").text
10    price = p.find_element(By.CLASS_NAME, "price").text
11    data.append([title, price])
12driver.quit()
13df = pd.DataFrame(data, columns=["Title", "Price"])
14df.to_csv("products.csv", index=False)

Selenium vs. BeautifulSoup와 Scrapy: Selenium이 특별한 이유는?

selenium-vs-traditional-scrapers-comparison.png 이제 논쟁을 정리해 볼게요. 언제 Selenium을 써야 하고, 언제 BeautifulSoup이나 Scrapy가 더 나을까요? 간단히 비교해 보면 이래요:

도구가장 적합한 용도JavaScript 처리?속도 및 리소스 사용량
Selenium동적/인터랙티브 사이트느리고 메모리 사용량이 많음
BeautifulSoup단순한 정적 HTML 스크래핑아니오매우 빠르고 가벼움
Scrapy대량의 정적 사이트 크롤링제한적*매우 빠름, 비동기, RAM 적게 사용
Thunderbit노코드 비즈니스 스크래핑예(AI)소규모/중간 규모 작업에 빠름

*Scrapy도 플러그인을 사용하면 일부 동적 콘텐츠를 처리할 수 있지만, 본래 강점은 아니에요 ().

Selenium을 써야 할 때:

  • 클릭, 스크롤, 로그인 이후에만 데이터가 나타날 때
  • 팝업, 무한 스크롤, 동적 대시보드와 상호작용해야 할 때
  • 정적 스크래퍼로는 원하는 결과가 안 나올 때

BeautifulSoup/Scrapy를 써야 할 때:

  • 데이터가 초기 HTML에 이미 들어 있을 때
  • 수천 개 페이지를 빠르게 스크래핑해야 할 때
  • 리소스 사용을 최소화하고 싶을 때

코딩을 아예 건너뛰고 싶다면, 으로 AI를 활용해 동적 사이트도 스크래핑할 수 있어요. 그냥 “AI 필드 제안”을 클릭하고 Google Sheets, Notion, Airtable로 내보내면 돼요. 이 부분은 아래에서 더 자세히 설명할게요.

Selenium과 Python으로 웹 스크래핑 작업 자동화하기

솔직히 말해, 새벽 2시에 스크래핑 스크립트를 직접 실행하러 일어나고 싶은 사람은 없어요. 다행히 Python의 스케줄링 도구나 운영체제 스케줄러(Linux/Mac의 cron, Windows의 작업 스케줄러)를 이용하면 Selenium 작업을 자동화할 수 있어요.

schedule 라이브러리 사용하기

1import schedule
2import time
3def job():
4    # 여기에 스크래핑 코드 작성
5    print("스크래핑 중...")
6schedule.every().day.at("09:00").do(job)
7while True:
8    schedule.run_pending()
9    time.sleep(1)

또는 Cron 사용하기(Linux/Mac)

매시간 실행하려면 crontab에 아래 내용을 추가하세요:

10 * * * * python /path/to/your_script.py

자동화 팁:

  • GUI 팝업을 피하려면 Selenium을 헤드리스 모드로 실행하세요(아래 참고).
  • 오류를 기록하고, 문제가 생기면 알림을 보내도록 설정하세요.
  • 리소스를 확보하려면 항상 driver.quit()으로 브라우저를 닫으세요.

효율 높이기: 더 빠르고 안정적인 Selenium 스크래핑 팁

Selenium은 강력하지만, 조심하지 않으면 느리고 리소스를 많이 잡아먹을 수 있어요. 속도를 높이고 흔한 문제를 피하는 방법은 다음과 같아요:

1. 헤드리스 모드로 실행하기

Chrome 창이 열리고 닫히는 걸 백 번씩 볼 필요는 없어요. 헤드리스 모드는 브라우저를 백그라운드에서 실행해요:

1from selenium.webdriver.chrome.options import Options
2opts = Options()
3opts.headless = True
4driver = webdriver.Chrome(options=opts)

2. 이미지와 불필요한 콘텐츠 차단하기

텍스트만 스크래핑한다면 이미지를 굳이 불러올 필요가 없어요. 페이지 로딩 속도를 높이려면 차단하세요:

1prefs = {"profile.managed_default_content_settings.images": 2}
2opts.add_experimental_option("prefs", prefs)

3. 효율적인 선택자 사용하기

  • 복잡한 XPath보다 ID나 단순한 CSS 선택자를 우선 사용하세요.
  • time.sleep()보다는 명시적 대기(WebDriverWait)를 쓰세요.

4. 지연 시간을 랜덤하게 두기

사람처럼 브라우징하는 것처럼 보이게 하려면 랜덤한 일시정지를 넣고 차단 가능성을 줄이세요:

1import random, time
2time.sleep(random.uniform(1, 3))

5. 사용자 에이전트와 IP 바꾸기(필요한 경우)

대량 스크래핑을 한다면 사용자 에이전트 문자열을 바꾸고, 단순한 봇 차단을 피하기 위해 프록시 사용도 고려해 보세요.

6. 세션과 오류 관리하기

  • try/except 블록으로 누락된 요소를 부드럽게 처리하세요.
  • 오류를 기록하고, 디버깅용 스크린샷도 남기세요.

더 많은 최적화 팁은 를 참고하세요.

고급: Selenium과 Thunderbit를 결합해 구조화된 데이터로 내보내기

여기서부터가 정말 흥미로워져요. 특히 데이터 정리와 내보내기에 드는 시간을 아끼고 싶다면 더 그렇죠.

Selenium으로 원시 데이터를 스크래핑한 뒤, 를 사용하면 다음을 할 수 있어요:

  • 필드 자동 감지: Thunderbit의 AI가 스크래핑한 페이지나 CSV를 읽고 열 이름을 제안해 줘요("AI 필드 제안").
  • 하위 페이지 스크래핑: 상품 페이지처럼 URL 목록이 있다면, Thunderbit가 각 페이지를 방문해서 표를 더 풍부한 정보로 채워 줘요. 추가 코드가 필요 없어요.
  • 데이터 보강: 데이터를 즉석에서 번역, 분류, 분석할 수 있어요.
  • 어디서든 내보내기: Google Sheets, Airtable, Notion, CSV, Excel로 한 번에 내보낼 수 있어요.

작업 흐름 예시:

  1. Selenium으로 상품 URL과 제목 목록을 스크래핑해요.
  2. 데이터를 CSV로 내보내요.
  3. Thunderbit를 열고 CSV를 불러온 뒤 AI가 필드를 제안하게 해요.
  4. Thunderbit의 하위 페이지 스크래핑으로 각 상품 URL에서 이미지나 사양 같은 더 많은 정보를 가져와요.
  5. 최종 구조화 데이터셋을 Sheets나 Notion으로 내보내요.

이 조합이면 수시간 걸리던 수작업 정리를 줄이고, 지저분한 데이터를 다루는 대신 분석에 집중할 수 있어요. 이 워크플로에 대해 더 알고 싶다면 를 확인해 보세요.

Selenium 웹 스크래핑을 위한 모범 사례와 문제 해결

웹 스크래핑은 낚시와 비슷해요. 큰 물고기를 낚을 때도 있지만, 잡초에 걸릴 때도 있죠. 스크립트를 안정적이면서도 윤리적으로 운영하는 방법은 다음과 같아요:

모범 사례

  • robots.txt와 사이트 이용약관을 존중하세요: 스크래핑이 허용되는지 항상 확인하세요.
  • 요청 속도를 조절하세요: 서버에 과부하를 주지 말고, 지연 시간을 넣고 HTTP 429 오류도 주의하세요.
  • 가능하면 API를 사용하세요: 데이터가 API로 공개되어 있다면 그게 더 안전하고 신뢰할 수 있어요.
  • 공개 데이터만 스크래핑하세요: 개인정보나 민감 정보는 피하고, 개인정보 보호법도 염두에 두세요.
  • 팝업과 CAPTCHA를 처리하세요: Selenium으로 팝업은 닫을 수 있지만, CAPTCHA는 자동화가 어렵기 때문에 조심해야 해요.
  • 사용자 에이전트와 지연 시간을 랜덤화하세요: 탐지와 차단을 피하는 데 도움이 돼요.

자주 발생하는 오류와 해결 방법

오류의미해결 방법
NoSuchElementException요소를 찾을 수 없음선택자를 다시 확인하고, 대기를 사용하세요
타임아웃 오류페이지나 요소 로딩이 너무 오래 걸림대기 시간을 늘리고, 네트워크 속도를 확인하세요
드라이버/브라우저 불일치Selenium이 브라우저를 실행하지 못함드라이버와 브라우저 버전을 업데이트하세요
세션 충돌브라우저가 예기치 않게 종료됨헤드리스 모드를 사용하고 리소스를 관리하세요

더 많은 문제 해결 팁은 를 참고하세요.

결론 및 핵심 요약

동적 웹 스크래핑은 이제 더 이상 하드코어 개발자만의 영역이 아니에요. Python Selenium을 사용하면 어떤 브라우저든 자동화하고, 가장 까다로운 JavaScript 중심 사이트와도 상호작용하며, 세일즈, 리서치, 혹은 단순한 호기심을 위해 필요한 데이터를 가져올 수 있어요. 기억하세요:

  • Selenium은 동적이고 인터랙티브한 사이트에 가장 적합한 도구예요.
  • 핵심 3단계는 환경 설정, 요소 찾기, 추출 및 저장이에요.
  • 정기적인 데이터 업데이트를 위해 스크립트를 자동화하세요.
  • 헤드리스 모드, 스마트한 대기, 효율적인 선택자로 속도와 안정성을 높이세요.
  • Selenium과 Thunderbit를 결합하면 데이터 구조화와 내보내기가 쉬워져요. 특히 스프레드시트 정리에 시간을 빼앗기고 싶지 않을 때 유용해요.

직접 해볼 준비가 되셨나요? 위의 코드 예제부터 시작해 보세요. 한 단계 더 나아가고 싶다면 를 사용해 즉시 AI 기반 데이터 정리와 내보내기를 경험해 보세요. 더 많은 내용이 궁금하다면 심층 분석, 튜토리얼, 최신 웹 자동화 소식을 다루는 도 확인해 보세요.

즐거운 스크래핑 되세요. 선택자가 언제나 원하는 것을 정확히 찾아내길 바랄게요.

Thunderbit AI 웹 스크래퍼를 무료로 사용해 보기

자주 묻는 질문

1. BeautifulSoup나 Scrapy 대신 Selenium으로 웹 스크래핑을 해야 하는 이유는 무엇인가요?
Selenium은 사용자 행동이나 JavaScript 실행 후에 콘텐츠가 로드되는 동적 웹사이트를 스크래핑하는 데 이상적이에요. BeautifulSoup과 Scrapy는 정적 HTML에 더 빠르지만, 동적 요소와 상호작용하거나 클릭과 스크롤을 흉내 내지는 못해요.

2. Selenium 스크래퍼를 더 빠르게 실행하려면 어떻게 해야 하나요?
헤드리스 모드를 사용하고, 이미지와 불필요한 리소스를 차단하고, 효율적인 선택자를 쓰고, 사람처럼 보이도록 랜덤 지연을 추가하세요. 더 많은 팁은 를 참고하세요.

3. Selenium 스크래핑 작업을 자동으로 예약 실행할 수 있나요?
네! Python의 schedule 라이브러리나 운영체제 스케줄러(cron 또는 작업 스케줄러)를 사용해 정해진 간격으로 스크립트를 실행할 수 있어요. 스크래핑을 자동화하면 데이터를 최신 상태로 유지하는 데 도움이 돼요.

4. Selenium으로 스크래핑한 데이터를 가장 잘 내보내는 방법은 무엇인가요?
Pandas로 데이터를 CSV나 Excel로 저장하면 돼요. 더 고급 내보내기(Google Sheets, Notion, Airtable)가 필요하다면 데이터를 에 가져와서 원클릭 내보내기 기능을 사용하세요.

5. Selenium에서 팝업과 CAPTCHA는 어떻게 처리하나요?
팝업은 닫기 버튼을 찾아 클릭하면 돼요. CAPTCHA는 훨씬 어려워서, 마주쳤다면 수동 우회 방법이나 캡차 해결 서비스를 고려하고, 항상 사이트 이용약관을 존중하세요.

더 많은 스크래핑 튜토리얼, AI 자동화 팁, 비즈니스 데이터 도구의 최신 정보를 보고 싶다면 를 구독하거나 실전 데모가 있는 을 확인해 보세요.

더 알아보기

Topics
Selenium으로 스크래핑하기Selenium 웹 스크래핑 튜토리얼파이썬 Selenium 웹사이트 스크래핑
목차

Thunderbit 사용해 보기

리드와 기타 데이터를 단 2번의 클릭으로 수집하세요. AI로 더 빠르게.

Thunderbit 받기 무료입니다
AI로 데이터 추출하기
Google Sheets, Airtable, Notion으로 손쉽게 데이터를 옮겨 보세요
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week