Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
Selenium 4.10 버전
Selenuim으로 작성한 크롤링 파일을 Docker로 build 하려 했는데, docker는 화면 자체가 없고 chrome driver도 따로 설치해 주어야 하기 때문에 그대로 코드를 동작시킬 수 없다.
문제는 Selenium이 최신 버전인 4.10 까지 지속적인 업데이트를 하면서, 기존의 docker 상에서 Selenium 동작시키는 정보들을 따라 하면 오류가 발생한다. (덕분에 트러블 슈팅에 개고생을...)
여러 사이트의 정보로 시행착오를 거치며 결국 build에 성공한 4.10 버전의 build 방식을 소개하겠다.
Dockerfile
일단 Dockerfile의 작성은 아래의 게시글 작성자 분이 잘 설명해 주고 있다.
https://velog.io/@ywoosang/asd
크롬과 크롬 드라이버를 다운받는 명령어는 linux의 버전에 맞춰 자동으로 다운이 되니, Dockerfile은 문제가 되지 않는다.
하지만 driver 경로와 options 세팅이 Selenium 4.10 버전에서는 바뀌었기 때문에 python 코드를 변경해 주어야 한다.
드라이버 실행 경로 설정
오류메시지:
TypeError: WebDriver.__init__() got an unexpected keyword argument 'executable_path'
기존의 executable_path 인자가 4.10에서는 service로 바뀌었다.
따라서 Service 설치경로를 넣어 객체를 생성해 주고 인자로 넘기자.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service(executable_path='드라이버_설치경로/chromedriver.exe')
browser = webdriver.Chrome(service=service)
드라이버 Options 설정
도커는 GUI가 없기 때문에 headless 설정을 option으로 해주어야 하는데 ,
기존의 chrome_options라는 인자도 options로 바뀌었다...
따라서 최종적으로는 이렇게 webDriver를 실행해 주면 정상적으로 크롤링이 된다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
#실행 경로
_service = Service(executable_path='드라이버_설치경로/chromedriver.exe')
#드라이버 options
_options = webdriver.ChromeOptions()
_options.add_argument('--headless')
_options.add_argument('--no-sandbox')
_options.add_argument('--disable-dev-shm-usage')
browser = webdriver.Chrome(service=service,options=_options)
Selenium 4.11.2 버전
위의 코드가 4.11.2 버전에서는 오류가 발생한다.
이유는 4.11.2 버전부터는 더 이상 webdriver를 따로 다운로드할 필요가 없어지기 때문! (홀리쉿!)
따라서 Service에 path 설정 없이, 아래처럼 옵션만 인자로 넣어서 실행해주면 된다.
browser = webdriver.Chrome(options=_options)
'개발 > Docker' 카테고리의 다른 글
Docker Hub에 Docker Image 업로드하기 (0) | 2024.02.28 |
---|---|
Ubuntu Docker DNS 컨테이너 올리기 (forwaders 사용) (3) | 2024.02.28 |
[Virtual Box] Ubuntu에 Jenkins container 올리고 접속하기 (0) | 2024.02.28 |
Docker exec와 attach의 차이 (docker run) (0) | 2024.02.21 |
[Github Actions] 여러 Docker image 빌드하고 ECR로 업로드 하기 (0) | 2023.08.18 |