온라인 강의 자료모음 기업교육

Selenium(headless Chrome)로 크롤링 이해 및 실습

이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
AI · 풀스택 · 데이터 로드맵 Dave Lee 한 강사가 설계부터 강의까지 모두
사이트 바로가기
PhantomJS 지원 종료 안내

PhantomJS는 현재 개발이 중단되었습니다. Headless Chrome/Firefox와 Selenium WebDriver(ChromeDriver/GeckoDriver) 또는 Playwright 등 최신 대안을 사용하세요.

8. Selenium(headless Chrome)로 크롤링 이해 및 실습

  • 브라우저를 제어해서 크롤링을 하는 방법

8.1 Selenium (headless Chrome)

사전준비 (Selenium 설치)
1. Selenium 인스톨: pip install selenium
2. 웹드라이버 인스톨: 웹 테스트 자동화를 위해 제공되는 툴(각 browser및 os 별로 존재)
- selenium - 테스트 코드를 사용하여 브라우져에서의 액션을 테스트할 수 있게 해주는 툴
- Firefox, chromedriver 등 각 브라우져마다 웹드라이버 다운로드 가능
+ https://sites.google.com/a/chromium.org/chromedriver/ (Chrome 브라우저용)
+ https://github.com/mozilla/geckodriver/releases (Firefox 브라우저용)

확인: 설치 디렉토리를 알아두어야 함
In [1]:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# 드라이버 생성
# chromedriver 설치된 경로를 정확히 기재해야 함
# chromedriver = 'C:/dev_python/Webdriver/chromedriver.exe' # 윈도우 
chromedriver = '/usr/local/Cellar/chromedriver/chromedriver' # 맥
driver = webdriver.Chrome(chromedriver)

# 크롤링할 사이트 호출
driver.get("http://www.python.org")

# Selenium은 웹테스트를 위한 프레임워크로 다음과 같은 방식으로 웹테스트를 자동으로 진행함 (참고)
assert "Python" in driver.title

# <input id="id-search-field" name="q" 검색창 name으로 검색하기
# 태그 name으로 특정한 태그를 찾을 수 있음
elem = driver.find_element(By.NAME, "q")

# input 텍스트 초기화 
# elem.clear()

# 키 이벤트 전송가능함
# 태그가 input 태그이므로 입력창에 키이벤트가 전달되면, 입력값이 자동으로 작성됨
elem.send_keys("pycon")

# 태그가 input 태그이므로 엔터 입력시 form action이 진행됨
elem.send_keys(Keys.RETURN)

# Selenium은 웹테스트를 위한 프레임워크로 다음과 같은 방식으로 웹테스트를 자동으로 진행함 (참고)
assert "No results found." not in driver.page_source

# 명시적으로 일정시간을 기다릴 수 있음 (10초 기다림)
time.sleep(10)

# 크롬 브라우저 닫기 가능함
driver.quit()

8.1.2 Headless Chrome

  • GUI 없이 실행하는 크롬 브라우저
  • 터미널/서버 환경에서는 headless Chrome 사용 권장 (Selenium 4에서 기본 제공)
사전준비 (Selenium + Chrome)
1. pip install selenium
2. 크롬(또는 크롬 기반 브라우저) 설치
3. Selenium 4는 드라이버를 자동 관리하므로 별도 chromedriver 다운로드가 필요 없습니다.

확인: headless 옵션을 통해 GUI 없이 실행됩니다.

확인 사항

아래 셀은 headless Chrome 기준 코드입니다.
환경에 맞게 옵션만 추가하면 바로 실행할 수 있습니다.

고급 크롤링 기술을 체계적으로 정리한 온라인 강의입니다

현존 최강 파이썬 고급 크롤링 부트캠프

동적 웹페이지, 대용량 데이터 수집 기술

In [7]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

# 드라이버 생성 (Selenium 4는 chromedriver를 자동으로 관리)
driver = webdriver.Chrome(options=options)
https://www.python.org/
Welcome to Python.org

8.2 Selenium 태그 검색 주요 함수

  • 주요 함수 - find_element(By.TAG_NAME, ...), find_elements(By.TAG_NAME, ...)
    • find_element(By.TAG_NAME, ...): 최초 발견한 태그만 가져오기
    • find_elements(By.TAG_NAME, ...): 모든 태그 리스트로 가져오기
In [19]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170202185812986')

# 최초 발견한 태그만 검색
title = driver.find_element(By.TAG_NAME, 'h3')
print(title.text)

# 모든 태그 검색
h3s = driver.find_elements(By.TAG_NAME, 'h3')
for h3 in h3s:
    print(h3.text)

driver.quit()
'포켓몬고' 상륙 1주일.. 대한민국 곳곳이 들썩
'포켓몬고' 상륙 1주일.. 대한민국 곳곳이 들썩
많이본 뉴스
포토&TV
실시간 이슈
이 시각 추천뉴스
실시간 주요이슈
  • 주요 함수 - find_element(By.ID, ...), find_elements(By.ID, ...)
    • find_element(By.ID, ...): 최초 발견한 아이디를 가진 태그만 가져오기
    • find_elements(By.ID, ...): 아이디를 가진 모든 태그 리스트로 가져오기

데이터 분석/과학 전문가가 되기 위한 체계적인 로드맵입니다

가장 빠른 데이터 분석/과학 풀로드맵 (2025)

데이터 수집 → 분석 → 머신러닝/딥러닝 전과정

In [ ]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170202185812986')

body = driver.find_element(By.ID, 'harmonyContainer')
print(body.text)
    
driver.quit()
  • 주요 함수 - find_element(By.NAME, ...), find_elements(By.NAME, ...)
    • find_element(By.NAME, ...): 최초 발견한 태그 안에 name 값이 같은 태그 가져오기
    • find_elements(By.NAME, ...): 태그 안에 name 값이 같은 태그 모두 리스트로 가져오기