Docker Selenium(1)構築サービスおよびchrome使用firefox


Docker Seleniumは、SeleniumをDockerで実行することができ、セットアップ時間を短縮し、各ブラウザのバージョンを独立させることができ、一定の隔離性を維持し、非常に良いテスト環境です.
docker-selenium公式ドキュメント
https://www.lfhacks.com/tech/selenium-docker
https://hub.docker.com/r/selenium/standalone-chrome/dockerfile
ミラーの紹介
selenium/hub:Grid Hub、空白のSeleniunサーバ、selenium/node-chrome:Chromeノードに相当し、Grid Hubを追加して使用する必要があります.selenium/node-firefox:Firefoxノードは、Grid Hubを追加する必要があります.selenium/node-chrome-debug:Chromeノードで、VNCサーバも含まれており、Grid Hubを追加する必要があります.selenium/node-firefox-debug:Firefoxノード、VNCサーバも含まれているのでGrid Hubを追加する必要があります
selenium/standalone-chrome:Chromeを含むSeleniunサーバは、直接呼び出すことができます.selenium/standalone-firefox:Chromeを含むSeleniunサーバで、直接呼び出すことができます.selenium/standalone-chrome-debug:Chromeを含むSeleniunサーバ、VNCサーバも含まれており、直接呼び出すことができます.selenium/standalone-firefox-debug:Chromeを含むSeleniunサーバ、VNCサーバも含まれており、直接呼び出すことができます.
使用
docker conposeメソッド
seleniumは公式にdocker composeメソッドを提供しており、直接使用すれば簡単に構築できます.
公式連結
  • docker-compose.yaml
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    # To execute this docker-compose yml file use docker-compose -f  up
    # Add the "-d" flag at the end for deattached execution
    version: "3"
    services:
      selenium-hub:
        image: selenium/hub:3.12.0-boron
        container_name: selenium-hub
        ports:
          - "4448:4444"
      chrome:
        image: selenium/node-chrome:3.12.0-boron
        depends_on:
          - selenium-hub
        environment:
          - HUB_HOST=selenium-hub
          - HUB_PORT=4444
      firefox:
        image: selenium/node-firefox:3.12.0-boron
        depends_on:
          - selenium-hub
        environment:
          - HUB_HOST=selenium-hub
          - HUB_PORT=4444
    
  • docker-compose up --build

  •  
  • 構築成功
  • docker-compose.yamlで公開されている4448ポートを指定し、ページを開くと正常にアクセスでき、呼び出せるブラウザにはChromeとFirefoxがあります.
     
    Python呼び出し
    呼び出し方法は、ローカル構築selenium serverと同様であり、以下ではchromeを例に挙げる.
  • Chromeオブジェクトを作成する
  • 1
    2
    3
    4
    5
    6
    7
    
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    browser = webdriver.Remote(
        command_executor='http://192.168.8.22:4448/wd/hub',
        desired_capabilities=DesiredCapabilities.CHROME,
    )
    

    正常に呼び出されると、sleniumページでもchromeが使用されているのが表示されます.
     
  • Googleのトップページにアクセスし、ページタイトル
  • を印刷してみます.
    1
    2
    3
    
    browser.get('http://www.google.com')
    print(browser.title)
    # Google
    
  • 現在のページを切り取るテスト
  • 1
    
    browser.save_screenshot("chrome.png")
    

     
  • ブラウザ
  • を解放
    1
    
    browser.quit()
    

    呼び出しを終了すると、sleniumページのchromeがカラーに戻ります.
     
    もう1つのモード:Debug Mode
    Docker Seleniumには、主に画面のあるseleniumを提供し、ブラウザが何をしているのかを直接見ることができます.Debug ModeはVNCサーバを使用して5900ポートを占有していますが、ポートごとに1つのノード(Chrome、Firefoxなど)しか実行できません.2つのノード以上を含めるには、異なるポートを公開する必要があります.5900:5900、5901:5900...
    Docker Componentメソッド:
  • docker-compose up --build
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    # To execute this docker-compose yml file use docker-compose -f  up
    # Add the "-d" flag at the end for deattached execution
    version: '2'
    services:
      firefox:
        image: selenium/node-firefox-debug:3.12.0-boron
        volumes:
          - /dev/shm:/dev/shm
        depends_on:
          - hub
        environment:
          HUB_HOST: hub
        ports:
          - "5900:5900"
    
      chrome:
        image: selenium/node-chrome-debug:3.12.0-boron
        volumes:
          - /dev/shm:/dev/shm
        depends_on:
          - hub
        environment:
          HUB_HOST: hub
        ports:
          - "5901:5900"
    
      hub:
        image: selenium/hub:3.12.0-boron
        ports:
          - "4450:4444"
    
  • seleniumページ
  • へのアクセス
    このページにはSelenium hubの状態が表示されており、VNCを見たい場合はDockerコンテナに入ってから見る必要があります.
     
    VNCでブラウザが何をしているかを見る
  • VNCソフト
  • を取り付ける
    推奨ツール無料VNC:ultravnc
    ultravncダウンロードアドレス
  • UltraVNC Viewer
  • を開く
     
    ダウンロードとインストールが完了したら、Docker内のVNCサーバーに接続します.
  • クリック接続
  •  
  • 入力パスワード
  •  
    デフォルトパスワード:secret
    プリセットにはパスワードがあります.パスワードを入力したくない場合は、コンテナ変数にVNC_NO_PASSWORD: 1を加えることができます.
  • 接続成功
  • この画面を見るとVNCへの接続に成功しました
     
    Python呼び出し
  • スクリプトを作成し、selniumの実行状況をテストします.
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.common.keys import Keys
    
    browser = webdriver.Remote(
        command_executor='http://192.168.8.22:4450/wd/hub',
        desired_capabilities=DesiredCapabilities.CHROME,
    )
    
    browser.get("http://www.google.com")
    browser.find_element_by_id("lst-ib").send_keys("python")
    browser.find_element_by_name("btnK").send_keys(Keys.ENTER)
    titles = browser.find_elements_by_xpath(".//h3[@class='r']//a")
    print([i.text for i in titles])
    browser.quit()
    
  • 画面のあるseleniumに
  • が現れました
     
    小結
    docker seleniumはDockerを通じて構築された関係で、構築が非常に便利で迅速で、ここでは主に2つのモードの作成容器を紹介しました.1つはブラウザが見えるもので、1つは黙って実行されているもので、テストの実行速度も非常に速く、実体ホストよりもずっと順調になっているような気がしますが、長期的なテスト状況では、他の問題があるかどうか分かりません.
     
    https://maliaotw.github.io/2018/06/08/Docker%20Selenium(1)%20%E6%90%AD%E5%BB%BA/
    https://blog.csdn.net/weixin_39198406/article/details/85085505
    https://www.jianshu.com/u/a70a89d3258f