如何用SeleniumVBA配置代理服务器以解决Chrome认证弹窗问题
解决SeleniumVBA配置Chrome代理认证问题
你之前修改WebDriver.cls里的MSXML2.ServerXMLHTTP60代理设置是无效的,因为这是SeleniumVBA自身与WebDriver服务通信的代理,不是Chrome浏览器实例的代理配置,所以Chrome依然会弹出认证对话框。
正确的做法是通过ChromeOptions为Chrome浏览器实例配置代理,包含认证信息,具体步骤如下:
方法:使用PAC脚本配置带认证的代理
Chrome本身不支持直接在启动参数中传入代理用户名密码,通过PAC脚本可以将认证信息嵌入代理地址,避免弹出认证框。
完整代码示例
Sub SeleniumChromeProxyAuth() Dim driver As New ChromeDriver Dim options As New ChromeOptions Dim pacScript As String Dim proxyServer As String, proxyUser As String, proxyPassword As String ' 替换为你的代理信息 proxyServer = "your-proxy-server:port" ' 例如:192.168.1.100:8080 proxyUser = "your-proxy-username" proxyPassword = "your-proxy-password" ' 构建PAC脚本,嵌入代理认证信息 pacScript = "function FindProxyForURL(url, host) { " & _ "return 'PROXY " & proxyUser & ":" & proxyPassword & "@" & proxyServer & "; DIRECT'; " & _ "}" ' 将PAC脚本转为Base64编码,避免特殊字符问题 options.AddArgument "--proxy-pac-url=data:text/plain;base64," & EncodeBase64(pacScript) ' 启动Chrome浏览器并应用代理配置 driver.Start "chrome", options ' 测试访问目标页面 driver.Get "https://www.example.com" ' 后续业务逻辑... ' 关闭浏览器 driver.Quit End Sub ' 辅助函数:将字符串转换为Base64编码 Function EncodeBase64(text As String) As String Dim bytes() As Byte bytes = StrConv(text, vbFromUnicode) Dim xmlDoc As Object, xmlNode As Object Set xmlDoc = CreateObject("MSXML2.DOMDocument") Set xmlNode = xmlDoc.createElement("base64Node") xmlNode.DataType = "bin.base64" xmlNode.nodeTypedValue = bytes EncodeBase64 = xmlNode.Text Set xmlNode = Nothing Set xmlDoc = Nothing End Function
代码说明
- PAC脚本:通过
FindProxyForURL函数指定所有请求使用带认证信息的代理,格式为用户名:密码@代理服务器:端口 - Base64编码:将PAC脚本转为Base64后通过
data:text/plain的方式传递,避免脚本中的特殊字符导致配置失效 - ChromeOptions:通过
AddArgument方法添加代理PAC地址参数,启动Chrome时自动应用该配置
无认证代理的简化配置
如果你的代理不需要认证,直接使用--proxy-server参数即可:
options.AddArgument "--proxy-server=" & proxyServer
内容的提问来源于stack exchange,提问作者dan_yok
相关产品推荐
相关产品推荐

