75721


◆ 概要  
docker-composeのseleniumを動作させるとエラーが発生するが、解決できないので解決方法を教えてほしいです。  
`docker-composev3 docker-selenium`  
<https://github.com/SeleniumHQ/docker-selenium>

◆ ファイル構成

[code]

    ./
     - docker-compose.yml
     - Dockerfile
     - app.py
     - setup.py
     - setup.cfg
    
[/code]

`setup.py`

[code]

    from setuptools import setup
    setup()
    
[/code]

`setup.cfg`

[code]

    [metadata]
    name = TEST
    version = 0.1.0
    author = dream 
    description = Test
    long_description = file: README.md
    
    [options]
    packages = find:
    install_requires=
        lxml
        selenium
        beautifulsoup4
    
[/code]

`docker-compose.yml`

[code]

    version: "3"
    services:
      chrome:
        image: selenium/standalone-chrome:4.0.0-beta-3-20210426
        container_name: chrome
        volumes:
          - /dev/shm:/dev/shm
        ports:
          - 4444:4444
          - 5900:5900
    
      app:
        build:
          context: ./
          dockerfile: Dockerfile
        container_name: app
        volumes:
          - ./screenshots:/image/screenshots/
        tty: true
    
[/code]

`Dockerfile`

[code]

    FROM python:3
    
    ENV TZ "Asia/Tokyo"
    
    WORKDIR /app
    COPY . /app
    
    RUN python setup.py install
    
[/code]

テストでYahooのページを取得しようとしてみる。  
`app.py`

[code]

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    
    class Scraping(object):
        
        def __init__(self):
            # Login URL
            URL = "https://news.yahoo.co.jp/"
            options = webdriver.ChromeOptions()
            self.driver = webdriver.Remote(
                command_executor='http://chrome:4444/wd/hub',
                desired_capabilities=options.to_capabilities(),
                options=options,
            )
    
            # 暗黙的な待機処理
            self.driver.implicitly_wait(30)
    
            # 要素が見つかるまでの明示的な待機処理
            self.wait = WebDriverWait(self.driver, 30)
    
            self.driver.get(URL)
    
        def get_pages(self):
            p = self.driver.find_element(by=By.XPATH, value="//*[@id='snavi']/ul[1]/li[2]/a")
            print (p)
    if __name__ == "__main__":
        sys = System()
        sys.get_pages()
    
    
[/code]

◆ エラーコード

[code]

    /app/app.py:14: DeprecationWarning: desired_capabilities has been deprecated, please pass in an Options object with options kwarg
      driver = webdriver.Remote(
    Traceback (most recent call last):
      File "/app/app.py", line 32, in <module>
        sys = System()
      File "/app/app.py", line 14, in __init__
        driver = webdriver.Remote(
      File "/usr/local/lib/python3.9/site-packages/selenium-4.0.0b3-py3.9.egg/selenium/webdriver/remote/webdriver.py", line 217, in __init__
        self.start_session(capabilities, browser_profile)
      File "/usr/local/lib/python3.9/site-packages/selenium-4.0.0b3-py3.9.egg/selenium/webdriver/remote/webdriver.py", line 308, in start_session
        response = self.execute(Command.NEW_SESSION, parameters)
      File "/usr/local/lib/python3.9/site-packages/selenium-4.0.0b3-py3.9.egg/selenium/webdriver/remote/webdriver.py", line 369, in execute
        self.error_handler.check_response(response)
      File "/usr/local/lib/python3.9/site-packages/selenium-4.0.0b3-py3.9.egg/selenium/webdriver/remote/errorhandler.py", line 125, in check_response
        status = value["status"]
    KeyError: 'status'
    
[/code]

上記のエラーが調べても解決できません。

◆ Issueとして挙がっているっぽいので、回答を待ってみるのもありですが・・・  
<https://github.com/SeleniumHQ/selenium/issues/9437>

尚、以下のバージョンで実行しても正常に動作しないのですが webdriverのオプションの指定方法が誤っているのでしょうか？

過去のバージョンで試すも謎のループが発生して、正常に動作しませんでした。

VNCで確認するもブラウザが起動している様子はないです。


CC BY-SA 4.0
2021-05-04T04:42:26.417
75662
2021-05-07T09:01:57.327
2021-05-04T09:08:00.527
19110
43296
question
python docker docker-compose
docker-compose上でseleniumを動かすとエラーが発生する。


以下のように変更することで解決しました。

[code]

        volumes:
          - /dev/shm:/dev/shm
    
[/code]

↓

[code]

       shm_size: "2gb"
    
[/code]

`docker-compose.yml`

[code]

    version: "3"
    services:
      chrome:
        image: selenium/standalone-chrome:4.0.0-beta-3-20210426
        container_name: chrome
        shm_size: "2gb"
        ports:
          - 4444:4444
          - 5900:5900
    
      app:
        build:
          context: ./
          dockerfile: Dockerfile
        container_name: app
        volumes:
          - ./screenshots:/image/screenshots/
        tty: true
    
[/code]


CC BY-SA 4.0
2021-05-07T09:01:57.327
75721
2021-05-07T09:01:57.327
43296
75662
answer