

現在、docker環境でrailsを使って勉強中です。  
seleniumでスクレイピングをして遊んでいます。  
ローカルでは問題なく動いていたのですが、dockerizeした途端エラーが出ました。

**やりたいこと**  
ヘッドレス（画面を隠した状態？）ではなくスクレイピングをする対象のページを **画面に表示して** 動きを見える形にしたい。

理由：スクレイピングをする対象のページを開いた後に「パスワード」や「reCAPTCHA」を自分で手動で入力後、自動で処理を開始するため画面が出ていないと処理を開始できません。。。

**ローカル環境の時のソース**  
この後の処理で対象ページを表示してログイン情報の入力とreCAPTCHAを手動入力後、自動でデータを取得できるようになっています。↓

[code]

        require 'selenium-webdriver'
        require 'webdrivers'
        driver = Selenium::WebDriver.for :chrome
    
[/code]

**docker環境のときのソース(エラーが出るver)**

[code]

        require 'selenium-webdriver'
        require 'webdrivers'
        driver = Selenium::WebDriver.for :chrome #←エラー箇所
    
[/code]

**エラー内容**

[code]

    Selenium::WebDriver::Error::UnknownError (unknown error: Chrome failed to start: exited abnormally
    rails_1  |   (unknown error: DevToolsActivePort file doesn't exist)
    rails_1  |   (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)):
    
[/code]

**docker環境のときのソース(エラーが出ないver)**

[code]

        require 'selenium-webdriver'
        require 'webdrivers'
        options = Selenium::WebDriver::Chrome::Options.new
        options.add_argument('--headless')
        options.add_argument('--no-sandbox')
        driver = Selenium::WebDriver.for :chrome, options: options
    
[/code]

上の、「docker環境のときのソース(エラーが出ないver)」で「headlessオプション」がある時エラーは出ないのですが、ヘッドレスのため画面が出てこず何も処理ができません。。。  
動き的にdocker環境の時はヘッドレスオプションが必須なのか、と思っているのですがどうにかして画面に表示できるようにしたいです。

**質問内容**

そもそも自分のやりたい「 **ヘッドレスの画面を隠したやり方ではなく、スクレイピングしたいページを表示させたい**
」というのはdocker環境ではできないのか。できる場合のやり方。または、全く別の問題なのか。ご存知の方、教えていただきたいです。  
reCAPTCHAを自動で突破できるやり方があればヘッドレスでもいいんですけど。。。

dockerを動かしているホストのOSはmacOSCatalinaバージョン10.15 、dockerコンテナの中で動いてるOSはLinuxです。

＊ここで質問させて頂くことが初めてのため至らぬ事がありましたら申し訳ありません。初学者で、独学のため質問のしかた等も間違っていたり、情報が足りないなどありましたら教えていただきたいです。よろしくお願いいたします。


CC BY-SA 4.0
2019-11-01T17:25:35.277
60192
2020-05-29T00:05:25.457
2020-04-06T06:30:34.800
3060
36448
question
ruby-on-rails ruby docker web-scraping selenium
docker環境におけるseleniumを使ったスクレイピングについて


Selenium で試したわけではないのでこの回答が役に立つか分かりませんが、普通の Ubuntu などのイメージから作られたコンテナの中で起動された
Google Chrome の GUI をホスト環境に出すためには、X Window System をホスト環境とつなげる必要があります。headless
のときにはエラーが起きないということですので、このあたりでクラッシュしているのではないでしょうか。<https://github.com/jessfraz/dockerfiles>
で管理されている[この
Dockerfile](https://github.com/jessfraz/dockerfiles/blob/19bd3f93ed63e4f23c703602ccad8524a9e48c3a/chrome/stable/Dockerfile)
の起動オプションが参考になります。

また <https://github.com/SeleniumHQ/docker-selenium> で管理されている selenium/node-
chrome-debug イメージの Chrome には VNC を使って接続できるようになっているので、これを参考にイメージを作るのもアリかもしれません。


CC BY-SA 4.0
2019-11-01T19:13:46.587
60193
2019-11-01T19:13:46.587
19110
60192
answer