https://github.com/twtrubiks/docker-selenium-tutorial
docker-selenium-tutorial use pyhton
https://github.com/twtrubiks/docker-selenium-tutorial
docker python3 selenium
Last synced: about 1 year ago
JSON representation
docker-selenium-tutorial use pyhton
- Host: GitHub
- URL: https://github.com/twtrubiks/docker-selenium-tutorial
- Owner: twtrubiks
- Created: 2023-01-04T10:31:06.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-01-14T04:05:04.000Z (over 3 years ago)
- Last Synced: 2025-03-28T19:53:43.908Z (about 1 year ago)
- Topics: docker, python3, selenium
- Language: Python
- Homepage:
- Size: 4.88 KB
- Stars: 8
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# docker-selenium-tutorial
[Youtube Tutorial - docker-selenium-tutorial 教學 Python](https://youtu.be/pXOFmK0eVDk)
## 說明
以前在使用 selenium 時, 都需要先抓對應的 driver, 然後再開始使用,
如果電腦比較差, 跑起來又會比較慢, 而且也蠻吃電腦資源的, 所以, 今天
要來介紹 server 版本的 selenium 概念, 就是 docker-selenium, repo 如下
[https://github.com/SeleniumHQ/docker-selenium](https://github.com/SeleniumHQ/docker-selenium)
這樣子就可以把它執行在 server, 也不吃自己本機電腦的資源,
重點是大家還可以一起使用:thumbsup:
## 介紹
### Standalone
先來看一個例子 [docker-compose-standalone-firefox.yml](docker-compose-standalone-firefox.yml)
```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
```
```cmd
docker-compose -f docker-compose-standalone-firefox.yml up
```
進入 firefox 容器可以看到 driver 已經安裝好了.
```cmd
>> 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](docker-compose-standalone-chrome.yml)
接著可以進入 [http://localhost:4444/](http://localhost:4444/ui),
查看 Selenium Grid

接下來就是透過 python 連線,
安裝 selenium
```cmd
pip3 install selenium
```
程式碼可參考 [demo.py](demo.py)
```python
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](http://localhost:7900/?autoconnect=1&resize=scale&password=secret)

預設的密碼是 secret,
如果你不想要密碼, 可以透過設定 SE_VNC_NO_PASSWORD.
```yml
environment:
- SE_VNC_NO_PASSWORD=1 # NO_PASSWORD
- SE_VNC_VIEW_ONLY=1 # readonly
```
如果不想要可以控制頁面, 可以透過設定 SE_VNC_VIEW_ONLY.
這部份請參考 [Debugging](https://github.com/SeleniumHQ/docker-selenium#debugging)
### Video recording
也有錄影的模式可以使用,
[docker-compose-video.yml](docker-compose-video.yml)
```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](docker-compose-v3.yml)
```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](https://github.com/SeleniumHQ/docker-selenium#grid-url-and-session-timeout), 或是重起容器.
第二是這邊沒有 7900 看畫面, 但是你可以從 session 裡面的照相機圖示
點進去一樣可以瀏覽 UI.

### Running in Headless mode
請參考 [Running in Headless mode](https://github.com/SeleniumHQ/docker-selenium#running-in-headless-mode)
## 小結論
基本上我覺得這個東西真的不錯用, 可以用來測試或開發應該都沒有什麼問題,
簡單說, 推薦使用, 以後終於不用再擔心 chrome 版本和 driver 不符合了:smile:
## Donation
文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡:laughing:
綠界科技ECPAY ( 不需註冊會員 )

[贊助者付款](http://bit.ly/2F7Jrha)
歐付寶 ( 需註冊會員 )

[贊助者付款](https://payment.opay.tw/Broadcaster/Donate/9E47FDEF85ABE383A0F5FC6A218606F8)
## 贊助名單
[贊助名單](https://github.com/twtrubiks/Thank-you-for-donate)