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을 사용하여 웹 스크래핑을 하는 것은 약간의 설정이 필요하지만, 위의 단계들을 따르면 성공적으로 구현할 수 있습니다. 문제가 발생하면 트러블슈팅 섹션을 참조하여 해결하세요.
'기타 > Web technology' 카테고리의 다른 글
[WEB] 티스토리 블로그 Code Block 하이라이트 적용하기 (0) | 2021.09.11 |
---|---|
[WEB] 티스토리 블로그 favicon 파비콘 만들기 (0) | 2021.09.11 |