프로젝트

도커 실행 시 크롬드라이버와 크롬 버전 불일치

content0474 2025. 1. 22. 20:50

웹 크롤링을 위해 Selenium을 사용하고, ChromeDriverManager를 활용하여 크롬 드라이버를 자동으로 다운로드하여 사용

 

오류 메시지 selenium.common.exceptions.SessionNotCreatedException

 

원인

chromdriver vesion은 114, google-chrome version은 132

크롬 드라이버와 브라우저의 버전 일치는 두 소프트웨어 간의 호환성을 보장하고, 안정적인 자동화 작업을 보장하는 데 필수적이다. 버전 불일치는 예기치 않은 오류를 발생시킬 수 있기 때문에, 이를 해결하기 위해 버전 일치가 중요함

 

해결

둘 다 114 버전으로 통일

크롬 114 버전 설치: 구버전 크롬 다운로드 페이지에서 원하는 버전을 직접 다운로드

크롬 132는 안정화버전 출시일이 2025년 1월 14

최신 버전이 보안이나 성능면에서 뛰어나긴 하나, 자동화 작업에서 안정적으로 동작하고 예기치 않은 버그가 발생할 가능성이 적은 구버전을 선택함

 

도커환경에서도 크롤링이 가능하도록 도커파일 수정

RUN apt-get update && apt-get install -y \
    wget \
    gnupg \
    unzip \
    iputils-ping \
    libx11-xcb1 \
    libxcomposite1 \
    libxcursor1 \
    libxdamage1 \
    libxi6 \
    libxtst6 \
    libnss3 \
    libxrandr2 \
    libasound2 \
    libpango1.0-0 \
    libcups2 \
    libxss1 \
    libxshmfence1 \
    libgbm1
# Google Chrome 114 
COPY google-chrome-stable_114.0.5735.90-1_amd64.deb /tmp/
RUN dpkg -i /tmp/google-chrome-stable_114.0.5735.90-1_amd64.deb || true \
    && apt-get update \
    && apt-get install -f -y \
    && rm /tmp/google-chrome-stable_114.0.5735.90-1_amd64.deb
RUN echo "deb http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
    && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
    && apt-get update \
    && apt-get install -y postgresql-client-16 \
    && rm -rf /var/lib/apt/lists/*

# ChromeDriver 114 
RUN wget -q https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip && \
    mv chromedriver /usr/local/bin/ && \
    chmod +x /usr/local/bin/chromedriver && \
    rm chromedriver_linux64.zip
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 8000

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

 

크롤링 코드에 도커 실행 시 필요한 옵션들 추가

    def scrape_cnn_news_with_selenium(category_url, max_retries=1, retry_delay=5):
    options = webdriver.ChromeOptions()
    options.headless = True
    options = webdriver.ChromeOptions()
    options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
    options.add_argument("--disable-gpu")
    options.add_argument("--disable-extensions")
    options.add_argument("--disable-software-rasterizer")
    options.add_argument("--window-size=1920,1080")
    options.binary_location = "/usr/bin/google-chrome" 
    options.add_argument("--no-sandbox") 
    options.add_argument("--disable-dev-shm-usage") 
    options.add_argument("--headless")  
    driver = webdriver.Chrome(
    service=Service("/usr/local/bin/chromedriver"),
    options=options

'프로젝트' 카테고리의 다른 글

DB설계 전략-2  (0) 2025.01.24
DB설계 전략  (0) 2025.01.23
ResourceExhausted  (0) 2025.01.21
소셜계정 연동 시 중복확인 문제  (0) 2025.01.20
소셜계정 선택 로직 업데이트  (0) 2025.01.17