Sus*_*ire 5 proxy selenium docker
我正在使用 Docker Selenium 图像来运行浏览器节点,这里提供了 repo https://github.com/SeleniumHQ/docker-selenium。没有关于如何使用config.json提供代理值的文档。
我正在使用 Selenium 版本 2.44.0。
在我的基础设施中,某些资产来自需要在浏览器上配置代理才能访问它们的位置。我正在尝试在 chrome 节点上设置代理。根据这里的文档,代理可以设置如下:
java -jar selenium-2.44.0.jar -Dhttp.proxyHost=192.168.2.10 -Dhttp.proxyPort=80
Run Code Online (Sandbox Code Playgroud)
我的代理不需要用户名和密码,因此我忽略了这些值。SeleniumHQ 文档中没有明确提到的是,它是否需要在集线器或节点上或仅在节点上配置代理。我尝试了不同的组合,但对我没有用。
我正在运行的实际命令是:
对于集线器:
java -jar /opt/selenium/selenium-server-standalone.jar -role hub -Dhttp.proxyHost=192.168.2.10 -Dhttp.proxyPort=80 -hubConfig /opt/selenium/hubconfig.json
Run Code Online (Sandbox Code Playgroud)
当我运行上面的命令时,我可以看到 -D* 值显示在控制台配置上。
对于节点:
xvfb-run --server-args=":99.0 -screen 0 1360x1020x24 -ac +extension RANDR" java -jar /opt/selenium/selenium-server-standalone.jar -Dhttp.proxyHost=192.168.2.10 -Dhttp.proxyPort=80 -role node -hub http://$HUB_PORT_4444_TCP_ADDR:$HUB_PORT_4444_TCP_PORT/grid/register -nodeConfig /opt/selenium/config.json
Run Code Online (Sandbox Code Playgroud)
当我运行此命令时,我可以再次在控制台上看到代理值,但浏览器未加载资产。
另外,附带说明一下,这似乎可以在开发人员方面(在 Java 代码中)完成,但我很想在我的(操作)方面解决它。
谢谢 - 这是我们得到的:
首先,您需要一种方法来验证浏览器中的设置。
chrome://net-internals/proxyservice.config#proxy
实际的命令行指令是:
/chromeexec --proxy="http=http://proxyserver:port/;https=http://proxyserver:port/"
Run Code Online (Sandbox Code Playgroud)
请注意,如果不使用双引号,冒号将在 bash 命令行上爆炸。
现在,如果您以编程方式从 Webdriver Java 代码发送此内容 - 您需要转义双引号 - 因此 Java 中的代理服务器设置可能如下所示:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
proxy.setHttpProxy("\"http://proxyserver:port/\"")
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其作为执行参数传递。
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--proxy \"http=http://proxyserver:port/;https=http://proxyserver:port/\""));
WebDriver driver = new ChromeDriver(capabilities);
Run Code Online (Sandbox Code Playgroud)
现在您的原始问题是关于使用代理访问外部资源。我们所做的(与您的问题类似)是为我们正在访问的网站传递代理异常,以便外部资源将通过代理进行访问。
然后,您为您的主网站添加一个例外 - 假设资源是10.1.10.5这样的:
--proxy-bypass-list=10.1.10.5
Run Code Online (Sandbox Code Playgroud)
然后我们在代码中执行以下操作:
capabilities.setCapability("chrome.switches", Arrays.asList("--proxy=\"http=http://proxyserver:port/;https=http://proxyserver:port/\"" "--proxy-bypass-list=10.1.10.5"));
Run Code Online (Sandbox Code Playgroud)
请注意,设置用户名和密码是Chrome 中的一个错误。(如果这让您感到困惑,请为其加注星标。)
如果您需要用户名和密码,那么解决方案是PAC 文件。
语法是:
--proxy-pac-url=file:///proxy.pac
Run Code Online (Sandbox Code Playgroud)
文件格式如下:
if (host == "mylocalserver.com")
{
return 'DIRECT';
} else {
return return "PROXY wcg2.example.com:8080 ";
}
Run Code Online (Sandbox Code Playgroud)
对于代理设置中的用户名和密码,请注意以下事项:
代理自动配置文件不支持硬编码的用户名和密码。这背后也有充分的理由,因为提供对硬编码凭据的支持会带来重大的安全漏洞,因为任何人都可以轻松查看访问代理所需的凭据。
而是将代理配置为透明代理,这样您就不需要用户名和密码。您在评论之一中提到代理服务器位于您的 LAN 之外,这就是您需要身份验证的原因。但是,大多数代理支持基于源 IP 的规则,在这种情况下,只需允许来自公司网络的请求就很简单了。
原始代理自动配置规范最初由 Netscape 于 1996 年起草。原始规范不再直接可用,但您仍然可以使用 The Wayback Machine 的存档副本访问它。该规范没有太大变化,仍然与原来的基本相同。您将看到该规范非常简单,并且没有提供硬编码凭据。
要解决这个问题 - 你可以使用这个工具:
https://github.com/sjitech/proxy-login-automator
该工具可以创建本地代理并自动将用户/密码注入真实代理服务器。支持PAC脚本。
| 归档时间: |
|
| 查看次数: |
12086 次 |
| 最近记录: |