分布式硒网格和http代理
Distributed selenium grid and http proxy
我看到很多关于在代理后面使用 Selenium 的问题,其中 selenium 节点通过代理连接到 Internet。处处提到的解决方法是在创建webdriver实例时在代码中指定代理设置。
不幸的是,在我的情况下这是行不通的,因为我使用的是分布式硒网格,其中不同的节点需要不同的代理设置。当测试 运行 时,测试 运行ning 仅与网格集线器通信,并且无法控制它将 运行 覆盖的节点 - 因此从测试内部设置代理是不可能。每个节点都是一台 linux 机器,在虚拟帧缓冲区中同时装有 Firefox 和 Chrome 运行ning。目前网格有大约 25 个节点分布在多个数据中心,但这个数字在未来可能会增加到 1000 个。
这样的设置有商业原因 - 我无法(在技术上和政治上)改变它们。
有什么方法可以在节点级别设置代理并让它仅应用于该节点上发生的所有事情吗?
显然,我需要做的就是定义 http_proxy
和 https_proxy
环境变量,然后 chrome 将使用这些变量。
对于firefox,代理参数可以添加到/etc/firefox-$version/pref/firefox.js
where $version
can be determined by 运行 firefox -v | awk '{print substr(,1,3)}'
.
我看到很多关于在代理后面使用 Selenium 的问题,其中 selenium 节点通过代理连接到 Internet。处处提到的解决方法是在创建webdriver实例时在代码中指定代理设置。
不幸的是,在我的情况下这是行不通的,因为我使用的是分布式硒网格,其中不同的节点需要不同的代理设置。当测试 运行 时,测试 运行ning 仅与网格集线器通信,并且无法控制它将 运行 覆盖的节点 - 因此从测试内部设置代理是不可能。每个节点都是一台 linux 机器,在虚拟帧缓冲区中同时装有 Firefox 和 Chrome 运行ning。目前网格有大约 25 个节点分布在多个数据中心,但这个数字在未来可能会增加到 1000 个。
这样的设置有商业原因 - 我无法(在技术上和政治上)改变它们。
有什么方法可以在节点级别设置代理并让它仅应用于该节点上发生的所有事情吗?
显然,我需要做的就是定义 http_proxy
和 https_proxy
环境变量,然后 chrome 将使用这些变量。
对于firefox,代理参数可以添加到/etc/firefox-$version/pref/firefox.js
where $version
can be determined by 运行 firefox -v | awk '{print substr(,1,3)}'
.