如何绕过Selenium Hub直接控制单个Selenium Node实现自定义网络管控
绕过Selenium Hub直接控制单个Node的实现方案
Selenium Node本身独立实现了完整的WebDriver协议端点,不需要依赖Hub就能直接接收WebDriver请求,仅需替换原Hub的连接地址为目标Node的对外访问地址即可实现需求,具体实现逻辑如下:
前提准备
- 确保你的Selenium Node Docker镜像启动时,默认的WebDriver监听端口(通常为4444)以及你自定义的RPC管控端口都正确配置了宿主机端口映射
- 弹性扩缩容组件同步维护一份可用Node列表,每个条目至少包含:可访问的宿主机IP、Node 4444端口映射的宿主机端口、RPC端口映射的宿主机端口、节点可用状态标识
直接连接Node的代码实现
以Python语言为例,其他编程语言逻辑完全一致,仅需将command_executor参数从原Hub地址替换为目标Node的访问地址即可:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 替换为你要连接的具体Node的宿主机IP + 4444端口映射的宿主机端口 node_access_addr = "http://<宿主机IP>:<Node映射的4444端口>" driver = webdriver.Remote( command_executor=node_access_addr, options=chrome_options )
配套调度逻辑优化
你可以根据自身业务需求自行实现负载均衡策略:
- 每次需要新建浏览器实例时,从维护的可用Node列表中筛选空闲节点
- 分配节点后标记为占用状态,调用对应Node地址生成driver实例
- 需要调整该浏览器对应节点的网络参数时,直接使用该节点绑定的宿主机IP+RPC端口调用你的管控脚本即可
- 浏览器实例销毁后,标记节点恢复为空闲状态,等待下一次分配
注意事项
- 若单个Node需要支持多会话,启动Node时配置
SE_NODE_MAX_SESSIONS参数调整最大会话数即可,你当前单节点仅运行1个Chrome实例的场景直接设为1即可 - 可自行实现节点健康检查:定时请求每个Node的
http://<Node访问地址>/status接口,返回结果中value.ready字段为true则说明节点处于可用状态
内容的提问来源于stack exchange,提问作者Ashish Kumar Singh
相关产品推荐
相关产品推荐

