프로필사진

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

 

도커 환경에서 셀레니움을 이용한 웹 스크래핑

도커 환경에서 셀레니움을 이용한 웹 스크래핑을 하는 방법에 대한 글이다.

velog.io

 

 

크롬과 크롬 드라이버를 다운받는 명령어는 linux의 버전에 맞춰 자동으로 다운이 되니, Dockerfile은 문제가 되지 않는다.

하지만 driver 경로와 options 세팅이 Selenium 4.10 버전에서는 바뀌었기 때문에 python 코드를 변경해 주어야 한다.

 

 

 

 

드라이버 실행 경로 설정

 

https://stackoverflow.com/questions/76550506/typeerror-webdriver-init-got-an-unexpected-keyword-argument-executable-p

 

TypeError: WebDriver.__init__() got an unexpected keyword argument 'executable_path' in Selenium Python

My code: from selenium import webdriver from selenium.webdriver.chrome.options import Options option = webdriver.ChromeOptions() driver = webdriver.Chrome(executable_path='./chromedriver.exe', opt...

stackoverflow.com

 

 

오류메시지:

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)

 

 

 

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함