@seo-maru  2023/01/30更新

DockerコンテナからホストMac上の実Chromeブラウザを立ち上げる


1. chromeドライバをインストール

  1. chromeのバージョンに合ったchromedriverをダウンロードしてくる
  2. /usr/local/bin/にchromedriverを設置
  3. 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固定にしなくても大丈夫

タイトルとURLをコピーしました