사진과 음악을 좋아하는 개발자 지망생의 블로그

[airflow] airflow에서 webdriver, selenium 돌리기 본문

개발/삽질일기

[airflow] airflow에서 webdriver, selenium 돌리기

devculture309 2023. 6. 26. 19:11
반응형

필요한 패키지 설치를 위한 dockerfile 작성

FROM ubuntu:latest

# 필요한 패키지 설치
RUN apt-get update && apt-get install -y curl gnupg

# Google Chrome 설치
RUN curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
RUN apt-get update && apt-get install -y google-chrome-stable

# Chrome WebDriver 설치
RUN apt-get install -yqq unzip
RUN curl -sSL https://chromedriver.storage.googleapis.com/91.0.4472.101/chromedriver_linux64.zip -o /tmp/chromedriver_linux64.zip
RUN unzip /tmp/chromedriver_linux64.zip -d /usr/local/bin/
RUN rm /tmp/chromedriver_linux64.zip
RUN chmod +x /usr/local/bin/chromedriver

CMD ["/bin/bash"]

 

dockerfile 실행 및 selenium에 필요한 yaml파일 수정

docker-compose.yml

.
.
.
services:
  chrome:
    build:
      context: .
      dockerfile: dockerfile.chrome
  selenium:
      container_name: remote_chromedriver
      image: selenium/standalone-chrome:latest
      ports:
        - 4444:4444
      restart: always 
.
.
.

 

Docker 실행

docker-compose up -d

 

Webdriver 실행

# Chrome WebDriver 생성
chrome_options = Options()
        
# 브라우저를 표시하지 않고 실행 (headless 모드)
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
remote_webdriver = 'remote_chromedriver'

remote_webdriver = 'remote_chromedriver'
with webdriver.Remote(f'{remote_webdriver}:4444/wd/hub', options=options) as driver:
    # Scraping part
    pass

또는

# Chrome WebDriver 생성
chrome_options = Options()
        
# 브라우저를 표시하지 않고 실행 (headless 모드)
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
remote_webdriver = 'remote_chromedriver'

#webdriver
driver = webdriver.Remote(f'{remote_webdriver}:4444/wd/hub', options=chrome_options)

 

 

webdriver.Remote를 사용하는 이유

도커 환경에서는 컨테이너가 격리되어 있으며 독립적인 환경에서 실행해야 됨

따라서 Selenium과 WebDriver를 도커 컨테이너에서 사용하려면 웹드라이버를 독립적인 컨테이너로 실행해야 함

 

이때 webdriver.Remote를 사용하여 원격 웹드라이버에 연결함

원격 웹드라이버는 별도의 도커 컨테이너로 실행되며, 웹 브라우저를 제어하기 위한 드라이버 프로세스를 실행함

원격 웹드라이버는 웹드라이버 호스트 및 포트를 지정하여 연결할 수 있으며,

일반적으로 웹드라이버 호스트와 포트는 도커 네트워크에서 실행 중인 웹드라이버 컨테이너의 IP 주소와 포트를 사용함

 

따라서 Selenium과 WebDriver를 사용하여 웹 브라우저를 도커 컨테이너에서 제어하려면

원격 웹드라이버를 사용하여 컨테이너 외부의 웹드라이버에 연결해야 함.

이를 통해 도커 컨테이너 내부에서 독립적인 웹드라이버를 실행하고,

컨테이너 외부에서 웹드라이버에 연결하여 웹 브라우저를 제어할 수 있음.

반응형