如何在Selenium与ChromeDriver中配置HTTPS代理?
解决Selenium ChromeDriver的HTTPS代理配置问题
我看你已经搞定了HTTP代理的配置,但在HTTPS代理上踩了坑——其实你现有的代码里已经包含了HTTPS代理的对应配置项,只是对Selenium的Proxy类用法理解有点偏差,我来帮你理清楚:
你的两种尝试为啥失败?
- 用
123.123.123.123:443无法连接:大概率是你用的代理服务器的HTTPS监听端口根本不是443。很多代理服务商的HTTP和HTTPS端口是分开的,你之前用的31288是HTTP端口,HTTPS可能是另一个专属端口,直接硬套443当然连不上。 - 用
123.123.123.123:443@HTTPS代理无效:这种格式是错的,Selenium的Proxy类的各种set方法只认ip:port的纯字符串格式,不需要额外加@HTTPS这种协议标识。
正确的HTTPS代理配置姿势
其实很简单,只要确认你的代理服务器的HTTPS端口,然后对应设置到setSslProxy()方法里就行:
情况1:HTTP和HTTPS代理端口相同
如果你的代理服务器同一个端口同时支持HTTP和HTTPS请求(比如31288),那你原来的代码其实已经生效了,可能是其他问题让你误以为HTTPS代理没起作用。可以访问一个HTTPS站点(比如https://example.com),再查看Chrome的代理设置(chrome://settings/system)确认是否正确应用。
情况2:HTTP和HTTPS代理端口不同
如果代理服务器的HTTP和HTTPS端口分开,那就单独指定:
// 注意:路径里的反斜杠要转义,否则会报错 System.setProperty("webdriver.chrome.driver", "C:\\Users\\lll\\Desktop\\chromedriver.exe"); DesiredCapabilities cap = new DesiredCapabilities(); Proxy proxy = new Proxy(); // 替换成你实际的代理地址和端口 String httpProxy = "123.123.123.123:31288"; String httpsProxy = "123.123.123.123:XXXX"; // 这里填HTTPS代理的实际端口 proxy.setHttpProxy(httpProxy) .setFtpProxy(httpProxy) .setSslProxy(httpsProxy); // 专门设置HTTPS代理 cap.setCapability(CapabilityType.ForSeleniumServer.AVOIDING_PROXY, true); cap.setCapability(CapabilityType.ForSeleniumServer.ONLY_PROXYING_SELENIUM_TRAFFIC, true); cap.setCapability(CapabilityType.PROXY, proxy); driver = new ChromeDriver(cap);
额外注意事项
- 路径转义:原代码里的
C:\Users\lll\Desktop\chromedriver.exe要改成C:\\Users\\lll\\Desktop\\chromedriver.exe,不然Java会把单个反斜杠当成转义字符,导致找不到驱动文件。 - 代理认证:如果你的代理需要用户名密码,记得加上
proxy.setProxyAuthenticate("你的用户名:你的密码")。 - 验证方式:可以通过访问HTTPS站点后查看浏览器的网络请求(F12开发者工具的Network面板),确认请求是否走了代理。
内容的提问来源于stack exchange,提问作者hyuk




