한줄 요약:
정적인 페이지는 BeautifulSoup으로 충분하지만,
자바스크립트로 렌더링되는 동적 페이지는 Selenium으로 자동 제어하자!
1. 목표
- Selenium을 이용해 브라우저를 자동 조작하기
- 동적(스크롤, 버튼, 팝업) 페이지에서 데이터 크롤링
- 자동 로그인 / 자동 스크린샷 / 자동 스크롤까지
2. Selenium이란?
Selenium은 “브라우저를 자동으로 조작하는 도구”야.
실제 사람이 클릭·입력·스크롤하는 것을 그대로 코드로 재현할 수 있어.
✅ 설치 명령어
pip install selenium
3. WebDriver 설치
Selenium은 브라우저를 직접 조작하므로 브라우저별 드라이버가 필요해요.
| 브라우저 | 드라이버 이름 | 다운로드 링크 |
|---|---|---|
| Chrome | ChromeDriver | chromedriver.chromium.org |
| Edge | EdgeDriver | developer.microsoft.com/en-us/microsoft-edge/tools/webdriver |
| Firefox | GeckoDriver | github.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] 자동화 프로젝트: 유튜브 인기 영상 데이터 수집기