如何从Python连接Docker Selenium/Hub?VNC与远程驱动连接疑问
使用Selenium Hub实现多浏览器并发:连接、VNC访问及监控指南
我来帮你梳理下Selenium Hub的配置、连接和监控方法,刚好我之前也做过类似的部署,一步步来:
1. 调整Docker Compose配置(Hub + 浏览器节点)
首先需要把原来的单standalone容器改成Hub + 多节点的架构,Hub负责管理所有浏览器节点的会话分配。这里给你配置一个带Firefox和可选Chrome节点的示例:
services: django: &django links: - selenium-hub # Django容器现在连接Hub而不是单个浏览器容器 selenium-hub: image: selenium/hub ports: - "4444:4444" # Hub的核心端口,用于RemoteDriver连接 - "4442:4442" # 事件总线发布端口(节点和Hub通信用) - "4443:4443" # 事件总线订阅端口 firefox-node: image: selenium/node-firefox-debug 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_MAX_SESSIONS=5 # 每个Firefox节点允许的最大并发会话数,按需调整 ports: - "5900:5900" # 映射到宿主机的VNC端口 # 可选:添加Chrome节点(如果需要同时跑Chrome) chrome-node: image: selenium/node-chrome-debug 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_MAX_SESSIONS=5 ports: - "5901:5900" # 用不同的宿主机端口避免冲突
2. 连接RemoteDriver到Hub
现在不需要直接指定单个浏览器容器了,所有请求都发给Hub,Hub会自动把会话分配给空闲的浏览器节点。代码调整很简单:
Firefox连接示例
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities # 连接Selenium Hub,会自动分配可用的Firefox节点 browser = webdriver.Remote( command_executor='http://selenium-hub:4444/wd/hub', # 用Hub的服务名(Docker内部网络) desired_capabilities=DesiredCapabilities.FIREFOX )
Chrome连接示例(如果配置了Chrome节点)
browser = webdriver.Remote( command_executor='http://selenium-hub:4444/wd/hub', desired_capabilities=DesiredCapabilities.CHROME )
3. 通过VNC访问运行中的浏览器
每个-debug镜像都自带VNC服务,默认密码是secret。你需要根据节点的端口映射来连接:
- Firefox节点:用VNC客户端连接
localhost:5900 - Chrome节点:用VNC客户端连接
localhost:5901
如果添加更多节点,记得给每个节点映射不同的宿主机端口(比如5902、5903),避免端口冲突。
4. 监控运行中的浏览器和会话
Selenium Hub自带了可视化控制台,非常方便监控:
- 在宿主机浏览器访问
http://localhost:4444/ui,可以看到:- 所有浏览器节点的在线状态、可用会话数
- 当前正在运行的所有会话详情
- 每个会话的日志、甚至可以直接查看浏览器实时画面(部分版本支持)
另外,你也可以用Hub的REST API做自动化监控:
- 获取Hub和节点状态:
http://localhost:4444/wd/hub/status - 获取所有活跃会话:
http://localhost:4444/wd/hub/sessions
小提示
- 每个节点的
SE_NODE_MAX_SESSIONS不要设置太大,要根据宿主机的CPU、内存资源来调整,避免卡顿 - 如果需要更多并发会话,可以复制多个相同的节点配置(比如firefox-node-2、firefox-node-3),只要映射不同的VNC端口就行
内容的提问来源于stack exchange,提问作者Arti
相关产品推荐
相关产品推荐

