본문 바로가기
기타/Web technology

WSL2에서 Selenium 사용하기

by makepluscode 2024. 7. 4.
반응형

WSL2에서 Selenium 사용하기: 설정부터 트러블슈팅까지

WSL2에서 Selenium 사용하기: 설정부터 트러블슈팅까지

WSL2 (Windows Subsystem for Linux 2)에서 Selenium을 사용하여 웹 스크래핑을 하는 과정을 단계별로 설명하고, 발생할 수 있는 문제와 해결 방법을 소개합니다.

환경 설정

본 가이드는 다음 환경을 기준으로 작성되었습니다:

  • WSL2
  • Ubuntu 22.04.4 LTS
  • Python 3.10.12
  • Google Chrome 126.0.6478.126
$ cat /etc/issue
Ubuntu 22.04.4 LTS \n \l

$ google-chrome --version
Google Chrome 126.0.6478.126 
$ python3 --version
Python 3.10.12

1. 필요한 패키지 설치

먼저 필요한 패키지들을 설치합니다.

sudo apt update
sudo apt install -y python3-pip
pip3 install selenium

2. Chrome 설치

WSL2에 Chrome을 설치합니다.

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt --fix-broken install -y

3. ChromeDriver 설치

Chrome 버전에 맞는 ChromeDriver를 설치해야 합니다. 다음 스크립트를 사용하여 자동으로 설치할 수 있습니다.

#!/bin/bash

# Chrome 버전 확인
CHROME_VERSION=$(google-chrome --version | awk '{print $3}')
echo "Detected Chrome version: $CHROME_VERSION"

# ChromeDriver 다운로드 URL
CHROMEDRIVER_URL="https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/${CHROME_VERSION}/linux64/chromedriver-linux64.zip"

# ChromeDriver 다운로드 및 설치
wget -O chromedriver_linux64.zip $CHROMEDRIVER_URL
unzip -o chromedriver_linux64.zip
sudo mv -f chromedriver-linux64/chromedriver /usr/local/bin/chromedriver
sudo chown root:root /usr/local/bin/chromedriver
sudo chmod +x /usr/local/bin/chromedriver

# 정리
rm -rf chromedriver_linux64.zip chromedriver-linux64

echo "ChromeDriver $CHROME_VERSION has been installed successfully."
chromedriver --version

이 스크립트를 install_chromedriver.sh로 저장하고 실행 권한을 부여한 후 실행하세요:

chmod +x install_chromedriver.sh
./install_chromedriver.sh

4. Selenium 스크립트 작성

다음은 기본적인 Selenium 스크립트 예제입니다:

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

# Chrome 옵션 설정
chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--headless")  # 헤드리스 모드 실행

# WebDriver 설정 (시스템에 설치된 ChromeDriver 사용)
driver = webdriver.Chrome(options=chrome_options)

try:
    # 웹페이지 열기
    driver.get("https://www.python.org")

    # 페이지 제목 출력
    print(driver.title)

    # 검색 입력란 찾기
    search_bar = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.NAME, "q"))
    )

    # 검색어 입력 및 제출
    search_bar.send_keys("pycon")
    search_bar.submit()

    # 검색 결과 확인
    results = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "list-recent-events"))
    )
    print("검색 결과:", results.text)

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

이 스크립트를 selenium_test.py로 저장하세요.

5. 스크립트 실행

다음 명령어로 스크립트를 실행합니다:

python3 selenium_test.py

트러블슈팅

문제 1: ChromeDriver 버전 불일치

증상: SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version X

해결방법: Chrome 버전과 정확히 일치하는 ChromeDriver를 설치해야 합니다. install_chromedriver.sh 스크립트를 사용하여 올바른 버전을 설치하세요.

문제 2: Selenium 버전 호환성 문제

증상: TypeError: WebDriver.__init__() got an unexpected keyword argument 'service'

해결방법: Selenium을 최신 버전으로 업그레이드하거나, 코드를 수정하여 이전 버전과 호환되게 만듭니다.

pip install --upgrade selenium

문제 3: X11 관련 오류

증상: selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally

해결방법: 헤드리스 모드를 사용하거나, WSL2에 X11 서버를 설정합니다. 헤드리스 모드는 위의 스크립트에 이미 포함되어 있습니다.

문제 4: PATH 설정 문제

증상: selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.

해결방법: ChromeDriver가 /usr/local/bin에 올바르게 설치되었는지 확인하세요. 필요하다면 PATH에 수동으로 추가할 수 있습니다:

export PATH=$PATH:/usr/local/bin

결론

WSL2에서 Selenium을 사용하여 웹 스크래핑을 하는 것은 약간의 설정이 필요하지만, 위의 단계들을 따르면 성공적으로 구현할 수 있습니다. 문제가 발생하면 트러블슈팅 섹션을 참조하여 해결하세요.

반응형