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

최종 업데이트: January 23, 2026

요즘 웹 환경은 예전과는 완전히 달라졌어요. 우리가 자주 들어가는 대부분의 사이트가 자바스크립트로 움직이고, 콘텐츠도 실시간으로 동적으로 불러오는 경우가 많죠. 무한 스크롤, 팝업, 클릭해야만 보이는 대시보드 같은 요소들이 대표적입니다. 실제로 하고 있어서, 예전처럼 정적 HTML만 읽는 방식으로는 중요한 데이터를 놓치기 쉽습니다. 최신 쇼핑몰에서 상품 가격을 가져오거나, 지도에서 부동산 매물을 뽑으려다 원하는 정보가 소스 코드에 없어서 답답했던 경험, 한 번쯤 있으셨을 거예요.

이럴 때 바로 selenium으로 스크래핑이 진가를 발휘합니다. 저 역시 오랜 기간 자동화 도구를 만들고 다양한 웹사이트를 스크래핑해온 경험자로서, selenium을 제대로 활용하면 최신 동적 데이터도 손쉽게 뽑아낼 수 있다고 자신 있게 말씀드릴 수 있어요. 이번 selenium 웹 스크래핑 튜토리얼에서는 환경 세팅부터 자동화, 그리고 와 연동해 구조화된 데이터로 내보내는 방법까지 실전 예제로 차근차근 안내해 드릴게요. 비즈니스 분석가, 영업 담당자, 혹은 파이썬 selenium 웹사이트 스크래핑에 관심 있는 분이라면 실용적인 노하우와 함께, (XPath 디버깅의 고통을 이겨내며) 유쾌한 경험도 얻으실 수 있을 겁니다.

Selenium이란? 웹 스크래핑에 Selenium을 써야 하는 이유 selenium-dynamic-vs-static-web-scraping.png 먼저 Selenium의 기본부터 짚고 넘어갈게요. 은 오픈소스 프레임워크로, 크롬이나 파이어폭스 같은 실제 웹 브라우저를 코드로 조종할 수 있게 해줍니다. 즉, 페이지 열기, 버튼 클릭, 폼 입력, 스크롤, 자바스크립트 실행 등 사람이 하는 거의 모든 행동을 자동화할 수 있죠. 이게 왜 중요하냐면, 요즘 웹사이트는 처음부터 모든 데이터를 보여주지 않고, 사용자의 상호작용 이후에야 콘텐츠를 동적으로 불러오는 경우가 많기 때문이에요.

왜 Selenium이 필요할까요? BeautifulSoup이나 Scrapy 같은 전통적인 도구는 정적 HTML을 다루는 데는 정말 빠르고 가볍지만, 페이지가 로딩된 후 자바스크립트로 추가되는 데이터는 볼 수 없습니다. 반면 Selenium은 실제 브라우저를 직접 제어하니까, 실시간으로 페이지와 상호작용하며 아래와 같은 작업에 딱 맞아요:

  • “더 보기” 버튼을 눌러야 나타나는 상품 목록 추출
  • 실시간으로 변하는 가격이나 리뷰 정보 수집
  • 로그인, 팝업, 무한 스크롤 등 복잡한 UI 탐색
  • 대시보드, 지도 등 인터랙티브 요소에서 데이터 추출

즉, 페이지가 완전히 로드된 후나 사용자 행동 이후에만 보이는 데이터를 스크래핑할 때 selenium으로 스크래핑이 최고의 선택입니다.

파이썬 selenium 웹 스크래핑 핵심 단계

selenium으로 스크래핑을 할 때는 크게 세 단계로 정리할 수 있어요:

단계주요 작업중요한 이유
1. 환경 설정Selenium, WebDriver, 파이썬 라이브러리 설치도구 준비 및 환경 문제 예방
2. 요소 찾기ID, 클래스, XPath 등으로 원하는 데이터 위치 파악자바스크립트로 숨겨진 정보까지 정확히 타겟팅
3. 데이터 추출 및 저장텍스트, 링크, 테이블 등 추출 후 CSV/Excel로 저장웹 데이터를 실질적으로 활용 가능하게 변환

각 단계별로 실전 예제와 함께 살펴볼게요.

1단계: 파이썬 Selenium 환경 세팅

가장 먼저 해야 할 일은 Selenium과 브라우저 드라이버(예: ChromeDriver)를 설치하는 거예요. 요즘은 설치도 정말 간단해졌습니다.

Selenium 설치

터미널에서 아래 명령어만 입력하면 끝!

1pip install selenium

WebDriver 다운로드

  • 크롬: (크롬 버전과 맞춰야 해요)
  • 파이어폭스:

꿀팁: Selenium 4.6 이상부터는 Selenium Manager가 드라이버를 자동으로 받아주기 때문에, PATH 설정을 따로 할 필요가 없어요 ().

Selenium 첫 실행 예제

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 없는 서버라면 아래 headless 모드 팁 참고.

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 > 클래스 > CSS > XPath 순). 데이터가 늦게 로드된다면 명시적 대기(Explicit Wait)를 활용하세요:

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)

엑셀로 저장하려면 df.to_excel("products.xlsx")를, 구글 시트로 내보내려면 API를 활용할 수 있어요.

실전 예제: 상품명과 가격 스크래핑

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 중 언제 어떤 도구를 써야 할까요? 아래 표로 정리해봤어요:

도구적합한 용도자바스크립트 처리속도 및 자원 사용량
Selenium동적/인터랙티브 사이트가능느림, 메모리 사용 많음
BeautifulSoup단순 정적 HTML 스크래핑불가매우 빠름, 가벼움
Scrapy대량 정적 사이트 크롤링제한적*초고속, 비동기, 저메모리
Thunderbit노코드, 비즈니스 데이터 스크래핑가능 (AI)소규모/중간 작업에 빠름

*Scrapy도 플러그인으로 일부 동적 콘텐츠를 처리할 수 있지만, 주력은 아닙니다 ().

Selenium이 필요한 경우:

  • 클릭, 스크롤, 로그인 등 사용자 행동 이후에만 데이터가 보일 때
  • 팝업, 무한 스크롤, 동적 대시보드 등 복잡한 UI를 다뤄야 할 때
  • 정적 스크래퍼로는 한계가 있을 때

BeautifulSoup/Scrapy가 적합한 경우:

  • 데이터가 처음부터 HTML에 포함되어 있을 때
  • 수천~수만 페이지를 빠르게 크롤링해야 할 때
  • 최소한의 자원으로 작업하고 싶을 때

코딩 없이 동적 사이트를 스크래핑하고 싶다면, 의 AI 기능을 활용해 “AI 필드 추천” 후 구글 시트, Notion, Airtable 등으로 바로 내보낼 수 있습니다. (아래에서 자세히 소개할게요)

Selenium과 파이썬으로 웹 스크래핑 자동화하기

솔직히 말해서, 새벽 2시에 스크래핑 스크립트를 직접 돌리고 싶진 않으시죠? 다행히 파이썬의 스케줄링 라이브러리나 운영체제의 예약 기능(cron, 작업 스케줄러 등)을 활용하면 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

자동화 팁:

  • headless 모드로 실행해 GUI 팝업 없이 작업하세요.
  • 에러 로그를 남기고, 문제가 생기면 알림을 받도록 설정하세요.
  • 작업이 끝나면 반드시 driver.quit()으로 브라우저를 종료해 자원을 확보하세요.

Selenium 스크래핑 효율 높이기: 속도와 안정성 꿀팁

Selenium은 강력하지만, 잘못 쓰면 느리고 무거울 수 있어요. 아래 팁으로 속도와 신뢰성을 높여보세요:

  1. Headless 모드로 실행

브라우저 창이 계속 열렸다 닫히는 걸 볼 필요 없습니다. Headless 모드로 백그라운드에서 실행하세요:

1from selenium.webdriver.chrome.options import Options
2opts = Options()
3opts.headless = True
4driver = webdriver.Chrome(options=opts)
  1. 이미지 등 불필요한 리소스 차단

텍스트만 필요하다면 이미지 로딩을 막아 페이지 로딩 속도를 높일 수 있습니다:

1prefs = {"profile.managed_default_content_settings.images": 2}
2opts.add_experimental_option("prefs", prefs)
  1. 효율적인 요소 탐색
  • 복잡한 XPath보다 ID나 단순 CSS 선택자를 우선 사용하세요.
  • time.sleep() 대신 명시적 대기(WebDriverWait)를 활용하세요.
  1. 랜덤 딜레이 추가

사람처럼 보이도록 랜덤한 대기 시간을 넣어 차단 위험을 줄이세요:

1import random, time
2time.sleep(random.uniform(1, 3))
  1. User-Agent 및 IP 변경 (필요시)

대량 스크래핑 시 User-Agent를 바꾸고, 프록시를 사용해 간단한 차단을 피할 수 있습니다.

  1. 세션 및 에러 관리
  • try/except로 누락된 요소를 유연하게 처리하세요.
  • 에러 로그와 스크린샷을 남겨 디버깅에 활용하세요.

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

고급 활용: Selenium + Thunderbit로 구조화된 데이터 내보내기

Selenium으로 원시 데이터를 추출한 뒤, 를 활용하면 데이터 정제와 내보내기가 훨씬 쉬워집니다.

  • 필드 자동 인식: Thunderbit의 AI가 스크래핑한 페이지나 CSV를 읽고, 컬럼명을 자동 추천해줍니다(“AI 필드 추천”).
  • 서브페이지 스크래핑: 상품 상세 URL 등 여러 링크가 있다면, Thunderbit가 각 페이지를 방문해 추가 정보를 표에 자동으로 채워줍니다.
  • 데이터 가공: 번역, 분류, 분석 등 다양한 데이터 처리를 실시간으로 지원합니다.
  • 다양한 내보내기: 구글 시트, Airtable, Notion, CSV, Excel 등으로 원클릭 내보내기 가능.

실전 워크플로우 예시:

  1. Selenium으로 상품 URL과 제목 리스트를 스크래핑합니다.
  2. 데이터를 CSV로 저장합니다.
  3. Thunderbit에서 CSV를 불러오고, AI 필드 추천을 적용합니다.
  4. Thunderbit의 서브페이지 스크래핑으로 각 상품 URL에서 이미지, 스펙 등 추가 정보를 자동 수집합니다.
  5. 최종 구조화된 데이터를 시트나 Notion 등으로 내보냅니다.

이 조합을 활용하면 데이터 정리에 드는 시간을 대폭 줄이고, 분석에 집중할 수 있습니다. 자세한 워크플로우는 에서 확인하세요.

Selenium 웹 스크래핑 실전 팁 & 문제 해결법

웹 스크래핑은 낚시랑 비슷해요. 때로는 대어를 낚지만, 때로는 꼬임에 빠지기도 하죠. 아래 팁으로 스크립트를 안정적이고 윤리적으로 운영해보세요:

실전 팁

  • robots.txt와 사이트 이용약관 준수: 스크래핑 허용 여부를 꼭 확인하세요.
  • 요청 속도 조절: 서버에 과부하를 주지 않도록 딜레이를 넣고, HTTP 429 에러에 주의하세요.
  • 공식 API 활용: 공개 API가 있다면 API를 우선 사용하세요. 더 안전하고 신뢰할 수 있습니다.
  • 공개 데이터만 수집: 개인정보나 민감 정보는 피하고, 개인정보 보호법을 꼭 지키세요.
  • 팝업 및 CAPTCHA 처리: Selenium으로 팝업은 닫을 수 있지만, CAPTCHA는 자동화가 어렵습니다.
  • User-Agent 및 딜레이 랜덤화: 차단 방지에 효과적입니다.

자주 발생하는 에러와 해결법

에러의미해결 방법
NoSuchElementException요소를 찾을 수 없음선택자 재확인, 명시적 대기 사용
Timeout errors페이지/요소 로딩 지연대기 시간 늘리기, 네트워크 확인
Driver/browser mismatch브라우저 실행 불가드라이버와 브라우저 버전 일치시키기
Session crashes브라우저 예기치 않게 종료headless 모드 사용, 자원 관리

더 많은 문제 해결법은 에서 확인하세요.

마무리 & 핵심 요약

동적 웹 스크래핑은 이제 개발자만의 영역이 아닙니다. 파이썬 selenium으로 스크래핑을 활용하면 어떤 브라우저도 자동화하고, 복잡한 자바스크립트 기반 사이트에서도 원하는 데이터를 손쉽게 추출할 수 있어요. 비즈니스, 리서치, 혹은 단순한 호기심 충족까지 모두 가능합니다. 기억하세요:

  • 동적·인터랙티브 사이트에는 Selenium이 최적입니다.
  • 핵심 3단계: 환경 설정, 요소 찾기, 데이터 추출 및 저장.
  • 스크립트 자동화로 데이터 최신 상태 유지.
  • 속도와 안정성 최적화를 위해 headless 모드, 명시적 대기, 효율적 선택자 사용.
  • Thunderbit와 연계하면 데이터 구조화와 내보내기가 훨씬 쉬워집니다.

직접 도전해보고 싶으신가요? 위 코드 예제부터 시작해보세요. 더 나아가 AI 기반 데이터 정제와 내보내기가 필요하다면 를 활용해보세요. 더 많은 실전 팁과 튜토리얼은 에서 확인하실 수 있습니다.

즐거운 스크래핑 되시길 바랍니다. 여러분의 선택자가 항상 원하는 데이터를 찾아내길!

Thunderbit AI 웹 스크래퍼 무료 체험하기

자주 묻는 질문(FAQ)

  1. Selenium이 BeautifulSoup이나 Scrapy보다 웹 스크래핑에 더 적합한 이유는?
    Selenium은 사용자 행동이나 자바스크립트 실행 이후에 로드되는 동적 웹사이트 스크래핑에 최적화되어 있습니다. BeautifulSoup과 Scrapy는 정적 HTML에선 빠르지만, 동적 요소나 클릭·스크롤 등은 처리할 수 없습니다.

  2. Selenium 스크래퍼를 더 빠르게 만드는 방법은?
    headless 모드 사용, 이미지 등 불필요한 리소스 차단, 효율적인 선택자 활용, 랜덤 딜레이 추가 등이 있습니다. 자세한 팁은 를 참고하세요.

  3. Selenium 스크래핑 작업을 자동으로 예약 실행할 수 있나요?
    네! 파이썬의 schedule 라이브러리나 운영체제의 예약 기능(cron, 작업 스케줄러 등)으로 정해진 시간마다 자동 실행할 수 있습니다. 자동화로 데이터 최신 상태를 유지하세요.

  4. Selenium으로 추출한 데이터를 내보내는 가장 좋은 방법은?
    Pandas로 CSV나 Excel로 저장할 수 있습니다. 구글 시트, Notion, Airtable 등으로 내보내려면 에 데이터를 불러와 원클릭 내보내기 기능을 활용하세요.

  5. Selenium에서 팝업과 CAPTCHA는 어떻게 처리하나요?
    팝업은 닫기 버튼을 찾아 클릭하면 됩니다. CAPTCHA는 자동화가 매우 어렵기 때문에, 수동 처리나 전문 서비스 이용을 고려해야 하며, 사이트 이용약관을 반드시 준수하세요.

더 많은 스크래핑 튜토리얼, AI 자동화 팁, 비즈니스 데이터 도구 소식이 궁금하다면 구독 또는 에서 실전 데모를 확인해보세요.

더 알아보기

Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
Topics
Selenium으로 스크래핑하기Selenium 웹 스크래핑 튜토리얼파이썬 Selenium 웹사이트 스크래핑
목차

Thunderbit 체험하기

리드 및 다양한 데이터를 단 두 번의 클릭으로 추출하세요. AI로 구동됩니다.

Thunderbit 시작하기 무료로 이용 가능
AI로 데이터 추출하기
Google Sheets, Airtable, Notion으로 손쉽게 데이터 전송
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week