DockerコンテナからホストMac上の実Chromeブラウザを立ち上げる
1. chromeドライバをインストール
- chromeのバージョンに合ったchromedriverをダウンロードしてくる
- /usr/local/bin/にchromedriverを設置
- cd /usr/local/bin/ && xattr -d com.apple.quarantine chromedriver を実行
2. Selenium-hubをインストール
今回はRubyを使うので、ruby-seleniumを使用してselenium-hubをインストールする。
別の言語の場合は、適宜selenium-hubをインストールすること。
git clone https://github.com/capxuancuong/ruby-selenium.git
docker立ち上げ
docker-compose.ymlを修正。この記述によってprivate IPが固定される
version: "3" services: selenium-hub: build: . container_name: selenium-hub ports: - "4445:4444" volumes: - ./ruby-code/:/opt/ruby-code/ networks: frontend: ipv4_address: 172.20.0.5 networks: frontend: ipam: config: - subnet: 172.20.0.0/24
docker-compose upを実行すると、以下のように出力される
$docker-compose up Starting selenium-hub ... done Attaching to selenium-hub selenium-hub | 2021-06-21 09:47:02,475 CRIT Supervisor running as root (no user in config file) selenium-hub | 2021-06-21 09:47:02,475 INFO Included extra file "/etc/supervisor/conf.d/selenium-hub.conf" during parsing selenium-hub | 2021-06-21 09:47:02,478 INFO supervisord started with pid 8 selenium-hub | 2021-06-21 09:47:03,480 INFO spawned: 'selenium-hub' with pid 11 selenium-hub | Starting Selenium Hub with configuration: selenium-hub | 2021-06-21 09:47:03,497 INFO success: selenium-hub entered RUNNING state, process has stayed up for > than 0 seconds (startsecs) selenium-hub | { selenium-hub | "host": "0.0.0.0", selenium-hub | "port": 4444, selenium-hub | "role": "hub", selenium-hub | "maxSession": 5, selenium-hub | "newSessionWaitTimeout": -1, selenium-hub | "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher", selenium-hub | "throwOnCapabilityNotPresent": true, selenium-hub | "jettyMaxThreads": -1, selenium-hub | "cleanUpCycle": 5000, selenium-hub | "browserTimeout": 0, selenium-hub | "timeout": 1800, selenium-hub | "debug": false selenium-hub | } selenium-hub | 09:47:04.161 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.59, revision: e82be7d358 selenium-hub | 09:47:04.390 INFO [GridLauncherV3.lambda$buildLaunchers$5] - Launching Selenium Grid hub on port 4444 selenium-hub | 2021-06-21 09:47:04.922:INFO::main: Logging initialized @1411ms to org.seleniumhq.jetty9.util.log.StdErrLog selenium-hub | 09:47:05.292 INFO [Hub.start] - Selenium Grid hub is up and running selenium-hub | 09:47:05.293 INFO [Hub.start] - Nodes should register to http://172.20.0.5:4444/grid/register/ selenium-hub | 09:47:05.294 INFO [Hub.start] - Clients should connect to http://172.20.0.5:4444/wd/hub
このうち、以下の部分が重要
Nodes should register to http://172.20.0.5:4444/grid/register/ Clients should connect to http://172.20.0.5:4444/wd/hub
動作確認
Mac上で、selenium hubにアクセスできるかどうかを確認する。
http://localhost:4445/grid/console
にブラウザでアクセスして、画面表示されればOK。
seleniumスタンドアロンサーバーの起動
初回ダウンロード
Mac上で、以下のリンクから、最新のSeleniumServerをダウンロードする。
https://www.selenium.dev/downloads/
執筆時点では、selenium-server-standalone-3.141.59.jar
というファイルがダウンロードできる。
サーバー起動
Mac上で、以下コマンドでSelenimServerを起動する
java -jar selenium-server-standalone-3.141.59.jar -role node -browser browserName=chrome -hub http://localhost:4445/grid/register
Rubyからブラウザへ接続
上記のSelenium-hubとSeleniumサーバーが両方立ち上がっている状態で、
Docker内のRubyコンテナから、以下を実行すると、ホストMac側のブラウザが起動する
chrome_capabilities = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"excludeSwitches" => [ "enable-automation" ]}) url = "http://172.20.0.1:4445/wd/hub" driver = Selenium::WebDriver.for(:remote, url: url, desired_capabilities: chrome_capabilities)
追記
以下の設定にした方が、GOOD
DOCKER_HOST_IP="http://host.docker.internal:4445/wd/hub"
上記の設定をすると、ruby-selenimium でIP固定にしなくても大丈夫