Ch.1 Python 라이브러리 15선

Selenium — 로그인이 필요한 크롤링

article

핵심 내용

Selenium은 진짜 브라우저를 코드로 조종합니다

한 줄 요약: 실제 Chrome/Firefox 브라우저를 파이썬 코드로 자동 조종하는 라이브러리. 실생활 비유: 로봇 팔이 컴퓨터 앞에 앉아서 마우스 클릭하고, 키보드 치고, 스크롤하는 걸 상상하세요. Selenium이 바로 그 로봇 팔입니다. 사람이 브라우저에서 하는 모든 동작을 코드로 재현할 수 있어요.

BeautifulSoup: 이미 완성된 HTML 문서만 파싱. 로그인 불가능. JavaScript로 동적 로딩되는 데이터 수집 불가.

Selenium: 실제 브라우저를 띄워서 로그인, 클릭, 스크롤까지 가능. JS 렌더링 이후 데이터도 수집 가능.

로그인이 필요하거나 JS로 그려지는 사이트

BeautifulSoup vs Selenium 판단 기준 • 로그인 없이 볼 수 있는 정적 페이지 → BeautifulSoup (빠르고 가벼움) • 로그인 필요하거나 JS 렌더링 사이트 → Selenium (느리지만 강력함) • 둘 다 필요한 경우 → Selenium으로 로그인 후 BeautifulSoup으로 파싱

selenium + webdriver-manager 두 개를 설치합니다

pip install selenium webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# 크롬 브라우저 자동 실행
driver = webdriver.Chrome(
    service=Service(ChromeDriverManager().install())
)

# 구글 접속
driver.get('https://www.google.com')
print(driver.title)  # 'Google'

driver.quit()

실행 결과: 크롬 브라우저가 자동으로 열리고, 구글 페이지에 접속한 후 제목을 출력합니다. webdriver-manager 덕분에 크롬 드라이버를 따로 다운로드할 필요가 없어요.

어떤 사이트에서 무엇을 할지 구체적으로 말해주세요

좋은 프롬프트 예시 "Selenium으로 네이버 자동 로그인 후 블로그 방문자 통계를 CSV로 저장하는 스크립트 만들어줘. ID/PW는 환경 변수에서 읽어오고, headless 모드로 실행해줘."

프롬프트 변형 • "로그인 후 특정 페이지의 표를 pandas DataFrame으로 변환해줘" • "무한 스크롤 페이지에서 모든 상품 정보를 수집해줘" • "headless 모드로 매일 자동 실행되게 해줘" • "캡차가 뜨면 대기하도록 예외 처리 추가해줘"

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

# headless 모드 (브라우저 창 안 뜸)
options = Options()
options.add_argument('--headless')

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

# 로그인 폼 채우기
driver.find_element(By.ID, 'username').send_keys('내아이디')
driver.find_element(By.ID, 'password').send_keys('내비번')
driver.find_element(By.ID, 'login-btn').click()

네이버 검색 자동화 + 결과 수집기

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time, csv

driver = webdriver.Chrome(
    service=Service(ChromeDriverManager().install())
)

# 1. 네이버 접속 & 검색
driver.get('https://www.naver.com')
search = driver.find_element(By.ID, 'query')
search.send_keys('파이썬 독학')
search.send_keys(Keys.RETURN)
time.sleep(2)  # 페이지 로딩 대기

# 2. 블로그 탭 클릭
blog_tab = driver.find_element(
    By.CSS_SELECTOR, 'a[href*="blog"]'
)
blog_tab.click()
time.sleep(2)

# 3. 검색 결과 수집
results = driver.find_elements(
    By.CSS_SELECTOR, '.title_area a'
)

with open('naver_results.csv', 'w', newline='',
         encoding='utf-8-sig') as f:
    writer = csv.writer(f)
    writer.writerow(['순위', '제목', '링크'])
    for i, r in enumerate(results[:10], 1):
        writer.writerow([i, r.text, r.get_attribute('href')])
        print(f'{i}. {r.text}')

driver.quit()
print('\n✅ naver_results.csv 저장 완료!')

실행 방법: `python 네이버검색.py`로 실행. 크롬이 자동으로 열리고, 네이버에서 '파이썬 독학'을 검색한 뒤 블로그 결과 상위 10개를 CSV 파일로 저장합니다. 검색어만 바꾸면 어떤 주제든 자동 수집할 수 있어요.

Selenium이 BeautifulSoup과 다른 핵심 차이는?

key

핵심 용어

🔐 로그인 자동화

네이버, 인스타그램 등 로그인 후에만 보이는 데이터 수집

📜 무한 스크롤

인스타, 트위터처럼 스크롤해야 내용이 로딩되는 페이지

🖱️ 클릭 자동화

드롭다운 선택, 버튼 클릭 등 인터랙션이 필요한 사이트

📸 스크린샷

웹페이지를 자동으로 캡처해서 이미지로 저장

check_circle

핵심 정리

  • 1Selenium은 실제 브라우저를 코드로 자동 조종하는 라이브러리
  • 2로그인, 클릭, 스크롤 등 사람의 브라우저 조작을 그대로 재현 가능
  • 3BeautifulSoup은 정적 HTML 전용, Selenium은 JS 렌더링 + 로그인이 필요한 사이트에 사용
  • 4headless 모드로 브라우저 창 없이 백그라운드 실행 가능
  • 5AI 프롬프트에 사이트 URL, 로그인 방식, 수집할 데이터를 구체적으로 명시하면 정확한 코드 생성

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작