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
接下來就是透過 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
預設的密碼是 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
也有錄影的模式可以使用,
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,
# 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.
Running in Headless mode
小結論
基本上我覺得這個東西真的不錯用, 可以用來測試或開發應該都沒有什麼問題,
簡單說, 推薦使用, 以後終於不用再擔心 chrome 版本和 driver 不符合了
Donation
文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡
綠界科技ECPAY ( 不需註冊會員 )
歐付寶 ( 需註冊會員 )