본문 바로가기
카테고리 없음

Python에서 Selenium 크롤링을 위한 Chromedriver 설치 및 Headless 설정 방법

by 북더기 2025. 3. 23.

Python에서 Selenium을 활용하여 웹 자동화를 수행하려면 크롬 브라우저와 크롬 드라이버(ChromeDriver)를 설치하고, 이를 올바르게 설정하는 과정이 필요합니다. 크롬 드라이버는 Selenium이 크롬 브라우저를 제어할 수 있도록 도와주는 역할을 하며, 버전에 맞는 드라이버를 설치하고 경로를 설정하는 과정이 중요합니다. 또한, Headless 모드를 활용하면 브라우저 창을 띄우지 않고도 백그라운드에서 크롤링을 수행할 수 있습니다.

1. 크롬 브라우저 및 크롬 드라이버 설치

크롬 브라우저와 크롬 드라이버를 설치하는 과정은 운영체제에 따라 다소 차이가 있지만, 기본적으로 최신 버전의 크롬 브라우저를 설치한 후, 해당 버전에 맞는 크롬 드라이버를 다운로드하여 사용하면 됩니다.

아래의 예제로 함께 살펴보겠습니다. 크롬 드라이버는 버전 확인 후, 버전에 맞는 다운로드 링크를 활용할 수 있겠습니다.

# 크롬 브라우저 버전 확인 (Windows)
chrome://settings/help

# 크롬 드라이버 다운로드 (Mac/Linux/Windows)
https://chromedriver.chromium.org/downloads

크롬 브라우저가 이미 설치되어 있는 경우, 현재 설치된 버전을 확인한 후 동일한 버전의 크롬 드라이버를 다운로드하면 됩니다. 크롬 드라이버는 공식 웹사이트에서 제공되며, 다운로드한 후 실행 파일을 특정 경로에 저장해야 합니다.

Ubuntu 또는 Debian 계열 리눅스에서는 패키지 매니저를 이용하여 설치할 수도 있습니다.


# Ubuntu에서 크롬 브라우저 및 크롬 드라이버 설치
sudo apt update
sudo apt install -y google-chrome-stable
sudo apt install -y chromium-chromedriver

Windows에서는 다운로드한 크롬 드라이버의 실행 파일을 특정 폴더(예: C:\chromedriver\)에 저장하고, 이를 Python에서 사용할 수 있도록 경로를 설정해야 합니다.

2. 크롬 드라이버 경로 설정

설치한 크롬 드라이버를 올바르게 실행하려면 Selenium이 이를 인식할 수 있도록 드라이버 경로를 명시적으로 지정해야 합니다. 크롬 드라이버의 실행 파일 경로를 설정하는 방법은 운영체제에 따라 다를 수 있습니다.

아래의 예제로 함께 살펴보겠습니다.

from selenium import webdriver

# 크롬 드라이버 경로 설정
chrome_driver_path = "C:/chromedriver/chromedriver.exe"  # Windows
# chrome_driver_path = "/usr/bin/chromedriver"  # Linux (apt 설치 시 기본 경로)

# 크롬 드라이버 실행
driver = webdriver.Chrome(executable_path=chrome_driver_path)

# 웹 페이지 열기
driver.get("https://www.google.com")

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

위 코드에서 executable_path를 사용하여 크롬 드라이버의 경로를 명확하게 지정할 수 있습니다. 만약 환경 변수에 크롬 드라이버 경로를 추가하면 실행할 때마다 경로를 지정하지 않아도 됩니다.

Windows에서 환경 변수에 크롬 드라이버를 추가하려면 다음과 같이 설정할 수 있습니다.

# 환경 변수에 크롬 드라이버 경로 추가 (Windows)
setx PATH "%PATH%;C:\chromedriver\"

Linux에서는 export 명령어를 사용하여 설정할 수 있습니다.

# 환경 변수에 크롬 드라이버 경로 추가 (Linux)
export PATH=$PATH:/usr/bin/

이렇게 설정하면, Selenium이 크롬 드라이버를 자동으로 찾을 수 있으며, 코드 실행 시 명시적으로 경로를 지정할 필요가 없습니다.

3. Headless 모드 설정 (브라우저 창 없이 실행)

크롬 드라이버를 실행할 때 기본적으로 브라우저 창이 열리지만, Headless 모드를 사용하면 창을 띄우지 않고 백그라운드에서 작업을 수행할 수 있습니다. Headless 모드는 서버 환경에서 실행할 때 유용하며, 실행 속도를 높일 수 있다는 장점이 있습니다.

보통 디버깅을 하지 않고 진행하거나, 따로 X Windows / GUI 환경을 사용하지 않고 바로 페이지 접근 없이 데이터를 수집하는 경우 해당 모드를 설정하게 됩니다.

아래의 예제로 함께 살펴보겠습니다.

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

# 크롬 옵션 설정
chrome_options = Options()
chrome_options.add_argument("--headless")  # Headless 모드 활성화
chrome_options.add_argument("--disable-gpu")  # GPU 가속 비활성화 (Linux에서 필요할 수 있음)
chrome_options.add_argument("--no-sandbox")  # 샌드박스 모드 비활성화 (서버 환경에서 필요할 수 있음)
chrome_options.add_argument("--disable-dev-shm-usage")  # /dev/shm 사용 비활성화 (리눅스 환경 최적화)

# 크롬 드라이버 실행
driver = webdriver.Chrome(options=chrome_options)

# 웹 페이지 열기
driver.get("https://www.google.com")

# 현재 페이지 제목 출력
print("페이지 제목:", driver.title)

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

위 코드에서 chrome_options.add_argument("--headless") 옵션을 추가하면 브라우저 창을 띄우지 않고 크롤링을 수행할 수 있습니다. 이 방식은 리소스를 절약할 수 있으며, GUI 환경이 없는 서버에서도 원활하게 실행할 수 있습니다.

만약 Headless 모드에서 특정 요소가 정상적으로 로드되지 않는다면, JavaScript 실행을 기다리는 시간을 추가할 수도 있습니다.

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

# 페이지가 완전히 로드될 때까지 대기
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.NAME, "q")))

print("검색창이 정상적으로 로드되었습니다.")

이렇게 하면 페이지가 완전히 로드된 후 작업을 수행할 수 있어, Headless 모드에서도 안정적인 크롤링이 가능하게 됩니다. 

크롬 드라이버와 크롬 브라우저를 설정하고 실행하는 과정은 환경에 따라 다소 차이가 있을 수 있지만, 기본적인 원리는 동일합니다. 크롬 드라이버를 다운로드하고, 경로를 올바르게 설정한 후, 필요에 따라 Headless 모드를 활용하면 보다 효율적으로 Selenium을 사용할 수 있습니다.