我是 Docker 和 Selenium 網格的新手,并且在讓我的 Web 應用程式連接到 selenium 集線器時遇到問題。
docker-compose.yml
version: '3.8'
services:
db:
image: postgres
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- "${POSTGRES_PORT}:5432"
volumes:
- pgdata:/var/lib/postgresql/data
web:
build:
context: ..
dockerfile: docker/Dockerfile
environment:
FLASK_ENV: ${FLASK_ENV}
FLASK_CONFIG: ${FLASK_CONFIG}
APPLICATION_DB: ${APPLICATION_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_HOSTNAME: "db"
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_PORT: ${POSTGRES_PORT}
command: flask run --host 0.0.0.0
volumes:
- ..:/opt/code
ports:
- "5000:5000"
chrome:
image: selenium/node-chrome:4.0.0-20211013
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
- SE_NODE_GRID_URL=http://localhost:4444
ports:
- "6900:5900"
edge:
image: selenium/node-edge:4.0.0-20211013
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
- SE_NODE_GRID_URL=http://localhost:4444
ports:
- "6901:5900"
firefox:
image: selenium/node-firefox:4.0.0-20211013
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
- SE_NODE_GRID_URL=http://localhost:4444
ports:
- "6902:5900"
selenium-hub:
image: selenium/hub:4.0.0-20211013
container_name: selenium-hub
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
volumes:
pgdata:
當運行容器堆疊并檢查 netstat -a 時,我可以看到我的桌面正在偵聽埠 4444,而當我殺死容器時,它沒有。
我還可以通過訪問來驗證集線器是否正在運行并且我的所有節點都連接正常https//:localhost/4444,但是當我driver = webdriver.Remote(command_executor="http://localhost:4444")從 python Flask 應用程式(它在上面指定為 web 的容器中運行)運行時,我收到錯誤訊息:
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=4444): Max retries
exceeded with url: /session (Caused by NewConnectionError('<urllib3.connection.HTTPConnection
object at 0x7fd4855b7730>: Failed to establish a new connection: [Errno 111] Connection refused'))
我已嘗試指定所需的功能以匹配特定節點的驅動程式,但是無論如何我都會收到相同的錯誤。
我正在使用 Selenium 的最新版本“4.0.0”,正如您可以看到網格部分的 4.0.0 影像,所以我認為這不是兼容性問題。
碼頭工人
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------
development_chrome_1 /opt/bin/entry_point.sh Up 0.0.0.0:6900->5900/tcp,:::6900->5900/tcp
development_db_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp,:::5432->5432/tcp
development_edge_1 /opt/bin/entry_point.sh Up 0.0.0.0:6901->5900/tcp,:::6901->5900/tcp
development_firefox_1 /opt/bin/entry_point.sh Up 0.0.0.0:6902->5900/tcp,:::6902->5900/tcp
development_web_1 flask run --host 0.0.0.0 Up 0.0.0.0:5000->5000/tcp,:::5000->5000/tcp
selenium-hub /opt/bin/entry_point.sh Up 0.0.0.0:4442->4442/tcp,:::4442->4442/tcp,
0.0.0.0:4443->4443/tcp,:::4443->4443/tcp,
0.0.0.0:4444->4444/tcp,:::4444->4444/tcp
我覺得我在這里基本上錯過了一些東西,有什么想法嗎?
uj5u.com熱心網友回復:
我現在看到了錯誤。當我需要指定由 selenium grid 部署的網路名稱時,我錯誤地嘗試使用我的客戶端連接到 http://localhost:4444。
使固定
在您的flask_app.py 中更改此行
driver = webdriver.Remote(command_executor="http://localhost:4444")
到:
driver = webdriver.Remote(command_executor="http://container-name:4444")
其中 container-name 是在docker-compose.yml 中設定的 selenium hub 名稱
selenium-hub:
image: selenium/hub:4.0.0-20211013
container_name: selenium-hub
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
就我而言:“硒中心”
使用的 docker 網路資源:https : //docs.docker.com/compose/networking/
最后的想法
我想我被我仍然使用 http://localhost:port 連接到網格集線器和 Web 容器的事實絆倒了。我想區別在于客戶端請求來自哪里?從 docker 堆疊外部還是內部?無論如何,希望這對某人有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/321857.html
標籤:Python 硒 硒网络驱动程序 docker-compose 硒网格
