twtrubiks / docker-selenium-tutorial

docker-selenium-tutorial use pyhton

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

docker-selenium-tutorial

Youtube Tutorial - docker-selenium-tutorial 教學 Python

說明

以前在使用 selenium 時, 都需要先抓對應的 driver, 然後再開始使用,

如果電腦比較差, 跑起來又會比較慢, 而且也蠻吃電腦資源的, 所以, 今天

要來介紹 server 版本的 selenium 概念, 就是 docker-selenium, repo 如下

https://github.com/SeleniumHQ/docker-selenium

這樣子就可以把它執行在 server, 也不吃自己本機電腦的資源,

重點是大家還可以一起使用👍

介紹

Standalone

先來看一個例子 docker-compose-standalone-firefox.yml

version: "3"
services:
  firefox:
    image: selenium/standalone-firefox
    shm_size: 2gb
    ports:
      - "4444:4444"
      - "7900:7900"
    # environment:
    #   - SE_VNC_NO_PASSWORD=1 # NO_PASSWORD
    #   - SE_VNC_VIEW_ONLY=1   # readonly
docker-compose -f docker-compose-standalone-firefox.yml up

進入 firefox 容器可以看到 driver 已經安裝好了.

>> ls -al /opt

drwxr-xr-x 7 root root    4096 Dec 19 18:09 firefox-latest
-rwxr-xr-x 1 1000 1000 9272472 Oct 13 15:59 geckodriver-0.32.0
drwxrwxrwx 1 root root    4096 Dec 19 18:09 selenium

反之進入 chrome 容器可以也看到 driver 已經安裝,

可參考 docker-compose-standalone-chrome.yml

接著可以進入 http://localhost:4444/, 查看 Selenium Grid

alt tag

接下來就是透過 python 連線,

安裝 selenium

pip3 install selenium

程式碼可參考 demo.py

from selenium import webdriver

browser = webdriver.Remote(
    command_executor='http://localhost:4444/wd/hub',
    # options=webdriver.ChromeOptions()
    options=webdriver.FirefoxOptions()
)

browser.get('https://www.google.com')
print(browser.title)
browser.save_screenshot("firefox.png")
browser.quit()

如果我們想看 firefox 執行過程, 可以進入以下的連結

http://localhost:7900/?autoconnect=1&resize=scale&password=secret

alt tag

預設的密碼是 secret,

如果你不想要密碼, 可以透過設定 SE_VNC_NO_PASSWORD.

   environment:
      - SE_VNC_NO_PASSWORD=1 # NO_PASSWORD
      - SE_VNC_VIEW_ONLY=1   # readonly

如果不想要可以控制頁面, 可以透過設定 SE_VNC_VIEW_ONLY.

這部份請參考 Debugging

Video recording

也有錄影的模式可以使用,

docker-compose-video.yml

version: "3"
services:
  chrome_standalone:
    image: selenium/standalone-chrome
    shm_size: 2gb
    ports:
      - "4444:4444"
      - "6900:5900"  # 5900 for VNC Server
      - "7900:7900"

  chrome_video:
    image: selenium/video:ffmpeg-4.3.1-20221219
    volumes:
      - ./videos:/videos
    depends_on:
      - chrome_standalone
    environment:
      - DISPLAY_CONTAINER_NAME=chrome_standalone
      - FILE_NAME=chrome_video.mp4

當你關閉/停止容器的時候, 會將影片寫入 videos 資料夾,

影片會有全部操作的過程.

Hub and Nodes

除了 Standalone 之外, 還有另一種 Hub and Nodes,

docker-compose-v3.yml

# To execute this docker-compose yml file use `docker-compose -f docker-compose-v3.yml up`
# Add the `-d` flag at the end for detached execution
# To stop the execution, hit Ctrl+C, and then `docker-compose -f docker-compose-v3.yml down`
version: "3"
services:
  chrome:
    image: selenium/node-chrome:4.7.2-20221219
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  firefox:
    image: selenium/node-firefox:4.7.2-20221219
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  selenium-hub:
    image: selenium/hub:4.7.2-20221219
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"

這樣子就可以選擇要用哪個瀏覽器測試了.

這邊有兩個地方稍微說明一下,

第一是假如你有 session 沒有正確登入, 你會發現你沒有辦法再連結上去,

除非等到 session-timeout, 或是重起容器.

第二是這邊沒有 7900 看畫面, 但是你可以從 session 裡面的照相機圖示

點進去一樣可以瀏覽 UI.

alt tag

Running in Headless mode

請參考 Running in Headless mode

小結論

基本上我覺得這個東西真的不錯用, 可以用來測試或開發應該都沒有什麼問題,

簡單說, 推薦使用, 以後終於不用再擔心 chrome 版本和 driver 不符合了😄

Donation

文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡😆

綠界科技ECPAY ( 不需註冊會員 )

alt tag

贊助者付款

歐付寶 ( 需註冊會員 )

alt tag

贊助者付款

贊助名單

贊助名單

About

docker-selenium-tutorial use pyhton


Languages

Language:Python 100.0%