개발 공부/WEB이야기

셀레니움 삽질 안하고 바로 쓰는 방법

susong 2024. 9. 23. 01:52
728x90

들어가면서

셀레니움으로 설치할 때마다 삽질 하기를 벌써 수 백번, 이번에는 AMD64에서 쓰던 스크립트를 라즈베리파이(ARM64)로 옮기면서 또 고장이 났다. 문제는 Chrome Driver.. 되도록이면 로컬에서 ARM64용 드라이버를 설치해서 쓰려고 했는데, 아쉽게도 구글에서는 공식으로 제공해주지 않고.. 그렇다고 사용자들이 만든걸 쓰려다보니까 버전이 안맞는다..

 

사용자들 껏을 쓰면 크롬 버전을 낮춰야되는데 하다가 고장나고.. 또 맞춰보니 드라이버가 안돌고.. 미쳐버리기 직전에 누가 컨테이너 만들어두지 않았을까? 생각이 들었고, 그래서 가져다가 썼다.

 

결과는 대만족! 그리고 컨테이너를 쓰면, 어떤 플랫폼, 아키텍트, OS라도 삽질 안해도 된다는 생각에 글로 남겨둔다.

(혹시 셀레니움 설정에 30분 이상 삽질을 했다면, 아래 방법을 강추한다)


하는 방법

1. 도커를 설치한다

  • sudo apt install docker.io

2. 도커에 필요한 권한들을 설정해둔다.

  • sudo groupadd docker
  • sudo usermod -aG docker $USER
  • newgrp docker

3. 설치한다(아래 명령어는 크롬 버전)

  • docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" selenium/standalone-chrome

이 명령어를 치면 SHA값이 하나 뜨면서 컨테이너가 떴다고 뜰 것이다.

그러면 모든 준비는 끝났다!

 

띠용? 이게 왜 끝난거지 싶을 수 있지만 이제 당신은 Selenium을 잘 돌려주는 외부 대리인(컨테이너)를 만들어낸 것이다. 이제 모든 셀레니움 요청은 저 컨테이너로 보내면 된다.


예시코드

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

# Set Chrome options
chrome_options = Options()

# Connect to the Selenium Grid running in the Docker container
driver = webdriver.Remote(
    command_executor='http://localhost:4444/wd/hub',
    options=chrome_options
)

# Open a web page
driver.get("https://www.google.com")

print(driver.title)

# Close the browser
driver.quit()

이제 이렇게 코드를 치면 내 PC에서 돌고 있는 컨테이너에게 "셀레니움 돌려!"

라고 시키는 명령을 하게 된다.

그리고 우리는 저 컨테이너가 열심히 돌려온 것의 결과만 잘 받아보면 된다.

복잡한 설정이나 문제들은 모두 컨테이너 안에서 다 해결해줬다.

 

컨테이너님이 다 해결해주신다.

 

앞으로는 직접 설치 하려고 하지말고, 컨테이너 쓰자

https://github.com/SeleniumHQ/docker-selenium

 

GitHub - SeleniumHQ/docker-selenium: Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Docker, mak

Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Docker, making it easier to perform browser automation - SeleniumHQ/docker-selenium

github.com


삽질 기록

https://github.com/SergeyPirogov/webdriver_manager

 

GitHub - SergeyPirogov/webdriver_manager

Contribute to SergeyPirogov/webdriver_manager development by creating an account on GitHub.

github.com

Selenium을 사용하기 위해서는 다 아시다싶이, 브라우저 + 드라이버가 필요하다.

브라우저는 설치하기 쉽지만, 드라이버는 조금 까다로운 경우가 있다(브라우저랑 버전 맞춰야함.. ARM 지원 안하는 곳도 있음.. 브라우저에 맞는 드라이버는 뭔지 확인.. 등등)

 

이런 모든 경우를 다 해결해주는 것이 저 webdriver_manager이다. 나도 사용한지 몇 년 되어왔고, 지속적으로 관리가 잘되는 프로젝트라 믿을 수 있다. 이번에 문제를 해결하면서, Solved Issue에 ARM64 지원 부분이 있기에 하라는 대로 했는데 잘 안되었다.

ARM64라서 안되었던 것일 수도 있어서 혹시 다른 버전이라면(특히 Windows에서 귀찮으신 분들)이라면 webdriver을 이용해서 돌려보는 것도 추천한다.

예시코드

# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

 

728x90