[응용#2] Selenium으로 동적 페이지 자동 크롤링

한줄 요약:
정적인 페이지는 BeautifulSoup으로 충분하지만,
자바스크립트로 렌더링되는 동적 페이지는 Selenium으로 자동 제어하자!


1. 목표

  • Selenium을 이용해 브라우저를 자동 조작하기
  • 동적(스크롤, 버튼, 팝업) 페이지에서 데이터 크롤링
  • 자동 로그인 / 자동 스크린샷 / 자동 스크롤까지

2. Selenium이란?

Selenium은 “브라우저를 자동으로 조작하는 도구”야.
실제 사람이 클릭·입력·스크롤하는 것을 그대로 코드로 재현할 수 있어.

✅ 설치 명령어

pip install selenium

3. WebDriver 설치

Selenium은 브라우저를 직접 조작하므로 브라우저별 드라이버가 필요해요.

브라우저드라이버 이름다운로드 링크
ChromeChromeDriverchromedriver.chromium.org
EdgeEdgeDriverdeveloper.microsoft.com/en-us/microsoft-edge/tools/webdriver
FirefoxGeckoDrivergithub.com/mozilla/geckodriver

⚙️ 설치 후 환경 변수 등록 (Windows 기준)

1️⃣ 다운로드한 chromedriver.exe 파일을
C:\Python312\Scripts 또는 프로젝트 폴더에 복사
2️⃣ 경로를 복잡하게 쓰기 싫다면, 코드에서 직접 경로 지정 가능 👇

from selenium import webdriver

driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")

4. 기본 코드 예시

from selenium import webdriver

# 1️⃣ 브라우저 열기
driver = webdriver.Chrome()

# 2️⃣ 페이지 이동
driver.get("https://example.com")

# 3️⃣ 제목 출력
print(driver.title)

# 4️⃣ 브라우저 종료
driver.quit()

실행하면 실제 크롬 창이 열리고, 페이지가 로드된 뒤 자동으로 닫힙니다 🚀


5. 요소 찾기 (Element 선택)

BeautifulSoup처럼 Selenium도 HTML 요소를 찾아 조작할 수 있어요.

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")

# ID로 찾기
element = driver.find_element(By.ID, "search")

# 클래스 이름으로 찾기
button = driver.find_element(By.CLASS_NAME, "btn")

# 태그 이름으로 찾기
links = driver.find_elements(By.TAG_NAME, "a")

print(len(links))
driver.quit()

💡 find_element()한 개,
find_elements()여러 개를 리스트 형태로 반환합니다.


6. 입력, 클릭, 스크롤 자동화

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get("https://google.com")

# 검색창 찾기
search_box = driver.find_element(By.NAME, "q")

# 검색어 입력 + Enter
search_box.send_keys("파이썬 웹크롤링")
search_box.send_keys(Keys.RETURN)

time.sleep(3)  # 페이지 로딩 대기
driver.quit()

✅ 실제 구글 검색이 자동으로 실행됩니다!


7. 스크린샷 저장

driver.save_screenshot("result.png")

자동화된 테스트나 결과 확인 시 유용합니다.


8. 무한 스크롤 처리

동적 페이지는 스크롤할 때마다 새 데이터가 생기죠?
Selenium으로 스크롤 이벤트를 반복 실행할 수 있습니다 👇

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com/infinite-scroll")

# 여러 번 스크롤 내리기
for i in range(5):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)  # 로딩 대기

9. 자동 로그인 예시

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://example.com/login")

driver.find_element(By.ID, "username").send_keys("my_id")
driver.find_element(By.ID, "password").send_keys("my_pw")
driver.find_element(By.ID, "loginBtn").click()

time.sleep(3)
print("로그인 성공!")
driver.quit()

이 방법으로 자동 로그인 후 크롤링도 가능해요.


10. 팁: headless 모드 (창 안 띄우고 백그라운드 실행)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")  # 창 없이 실행
driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
print(driver.title)
driver.quit()

자동화 서버, 크롤링 서버에서는 이 headless 모드가 필수예요!


11. 고급 기능 예시 (대기, 명시적 wait)

동적 페이지는 로딩이 늦어질 때 오류가 날 수 있습니다.
이럴 땐 WebDriverWait으로 요소가 로드될 때까지 기다려야 해요 👇

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://example.com")

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "item"))
    )
    print(element.text)
finally:
    driver.quit()

✅ 10초 이내에 요소가 나타나면 통과,
없으면 TimeoutException 발생


12. 주의사항

주의 포인트설명
사이트 차단너무 빠른 자동 접근은 차단될 수 있음
로그인 자동화이용약관 위반이 아닌지 확인
headless 탐지일부 사이트는 봇 탐지를 함
sleep 대기너무 짧으면 로딩 전에 종료될 수 있음

13. 최종 점검 체크리스트

  • Selenium 설치 및 WebDriver 설정 완료
  • 요소 선택자(By.ID, By.CLASS_NAME, By.CSS_SELECTOR) 숙지
  • 자동 입력/클릭/스크롤 가능
  • headless 모드 적용 가능
  • 동적 로딩 대기(WebDriverWait) 사용

14. 요약 한 줄

Selenium은 “진짜 브라우저”를 조작하는 파워풀한 크롤링 도구!
버튼 클릭, 로그인, 무한 스크롤까지 자동으로 제어할 수 있다 ⚡


이전 강좌 👈 [응용#1] 웹 크롤러 만들기 (BeautifulSoup + requests 실전 예제)
다음 강좌 👉 [응용#3] 자동화 프로젝트: 유튜브 인기 영상 데이터 수집기

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.