新時代のMac開発!M2 MacでDocker+Selenium+Pythonを使いこなす完全スタートアップ
背景
久しぶりにデータサイエンス勉強するにあたり、競馬AI作りてーってなった
M2 MacにDockerはインストール済みだし、サクッとSelenium環境作ってスクレイピングしたろ!ってなったがどうやらM2環境では癖があるらしい
色々彷徨ってようやくDocker+Selenium環境作れたのでその備忘録。
※タイトルはChatGPTに考えてもらいました。。。
前提
OS
Apple M2 arm64
Ventura: 13.2.1
メモリ: 8GB
Docker ※インストール済み
Version: 20.10.17
Visual Studio Code ※インストール済み
Version: 1.71.2
Docker+Selenium+Python環境の概要
今回作成する環境概要は以下
ローカルPCにPythonコンテナとSeleniumコンテナの2つを作成する。
Pythonコンテナ
Pythonをインストールしたコンテナ。
Seleniumと他必要モジュールをインストールしている。
.pyファイルはこちらに作成し、Seleniumサーバーとchromeを操作する。
Seleniumコンテナ
Seleniumサーバー、WebDriver、Chromeがインストールされたコンテナ。
arm64の場合、Seleniarm/standalone-chromiumイメージを用いる必要がある!!(ここが詰まったポイント!かつ重要ポイント!)
環境構築手順
ディレクトリ構成
下記のようなディレクトリを作成する。
PythonSelenium
├── docker-compose.yml
├── py_context
│ ├── Dockerfile
│ └── requirements.txt
└── work
└── test.py
ソースコード
各ソースコードは以下
docker-compose.yml
version: '3'
services:
selenium: # selenium container
image: seleniarm/standalone-chromium:latest # docker hubのseleniarmイメージ
shm_size: 2gb # ホストとメモリを共有するために設定
ports:
- 4444:4444 # selenium sever port
- 7900:7900 # 実行中のChromeを確認するVNC用port
python: # python container
build: ./py_context # python3のbuild contextを指定
volumes:
- ./work:/work # ローカルの"./work"とコンテナの"/work"をバインド
tty: true # ターミナル入力を受け付ける
depends_on: # seleniumコンテナの後で起動させるように指定
- selenium
Dockerfile
FROM python:latest
RUN apt-get update && \
apt-get install -y \
build-essential \
cmake \
git \
sudo \
wget \
vim
RUN pip install --upgrade pip
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
WORKDIR /work
CMD ["/bin/bash"]
requirements.txt
requests
selenium
BeautifulSoup4
pandas
test.py
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
driver = webdriver.Remote(
command_executor = 'http://selenium:4444/wd/hub',
options = options
)
driver.implicitly_wait(10)
url = 'https://www.jra.go.jp/' # テストでアクセスするURLを指定
driver.get(url)
print(driver)
time.sleep(3)
driver.save_screenshot('test.png') # アクセスした先でスクリーンショットを取得
driver.quit()
実行
docker-composeを実行。
cd PythonSelenium
docker-compose build
docker-compoes up -d # detouched mode option
docker-compose exec python bash # 起動したpythonコンテナに入る
コンテナに入った後、test.pyを実行
python test.py
JRA日本中央競馬のTOPページのスクショが取得できていれば成功!!
まとめ
M2 macでDocker+Selenium環境を作成するにはSeleniarm/standalone-chromiumを使う必要がある。
私が色々迷った原因はググって出てくる結果がほぼほぼselenium/standalone-chromeを用いた内容となっておりエラーが多発。。。
実際「docker selenium」で検索すると9割が上記の内容。。
「m2 docker selenium」で検索しても???ってなる内容が多かったので備忘録として残しておきました、、