An open API service indexing awesome lists of open source software.

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

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

![alt tag](https://i.imgur.com/UOZxSCg.png)

接下來就是透過 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)

![alt tag](https://i.imgur.com/BuA8XhA.png)

預設的密碼是 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.

![alt tag](https://i.imgur.com/uUsvEJE.png)

### Running in Headless mode

請參考 [Running in Headless mode](https://github.com/SeleniumHQ/docker-selenium#running-in-headless-mode)

## 小結論

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

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

## Donation

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

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

![alt tag](https://payment.ecpay.com.tw/Upload/QRCode/201906/QRCode_672351b8-5ab3-42dd-9c7c-c24c3e6a10a0.png)

[贊助者付款](http://bit.ly/2F7Jrha)

歐付寶 ( 需註冊會員 )

![alt tag](https://i.imgur.com/LRct9xa.png)

[贊助者付款](https://payment.opay.tw/Broadcaster/Donate/9E47FDEF85ABE383A0F5FC6A218606F8)

## 贊助名單

[贊助名單](https://github.com/twtrubiks/Thank-you-for-donate)