基于Chromedriver的代理脚本失效,如何配置Manifest适配HTTP?
问题描述
我们有一款基于Chromedriver的测试软件,用来在同一台电脑上通过不同代理做站点检测,代理通过JavaScript脚本配置连接。大概一个月前因为Manifest版本更新,修改过脚本的Manifest设置。
从昨天开始Chrome脚本失效了,浏览器会弹出登录密码输入框,还显示“您的连接不安全”的提示。
当前用的脚本模板:
var config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "%proxy_host", port: parseInt(%proxy_port) }, bypassList: ["foobar.com"] } }; chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); function callbackFn(details) { return { authCredentials: { username: "%username", password: "%password" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: ["<all_urls>"]}, ['blocking'] );
对应的manifest.json:
{ "version": "1.0.0", "manifest_version": 3, "name": "Chrome Proxy", "permissions": [ "proxy", "tabs", "unlimitedStorage", "storage", "<all_urls>", "webRequest", "webRequestBlocking", "webRequestAuthProvider" ], "host_permissions": [ "<all_urls>" ], "background": { "service_worker": "proxy.js" }, "minimum_chrome_version":"22.0.0" }
手动输入账号密码的话代理能正常工作,怀疑代理证书失效了,想改成无SSL的HTTP方式,请问能不能通过配置Manifest实现这个需求?
解决方案
1. 改用纯HTTP代理无需修改Manifest核心配置
你要的无SSL HTTP代理,不用调整Manifest文件——你的当前脚本里已经把代理scheme设为"http"了,这就是纯HTTP代理的配置。但要解决弹出密码框和“连接不安全”的问题,得注意这几点:
2. 修复自动认证失效的问题
手动输密码能正常用,说明代理本身没问题,自动认证失效大概率是Manifest V3的权限限制导致:
- 确认
webRequestAuthProvider权限已经在permissions里声明(你的Manifest里已经加了),这个权限是Manifest V3里实现代理自动认证必须的。 - 检查
chrome.webRequest.onAuthRequired的监听是否触发:可以在callbackFn里加个console.log,然后在Chrome开发者工具的Service Workers面板里看日志,确认有没有执行到这个函数。
3. 解决“连接不安全”提示
这个提示一般不是代理的SSL问题,而是目标站点的SSL证书有问题,或者代理转发HTTPS流量时的证书校验问题:
- 如果是目标站点的证书问题,测试场景下可以给Chromedriver加启动参数
--ignore-certificate-errors,跳过证书校验。 - 如果是代理本身的SSL证书失效,切换到纯HTTP代理就可以解决,因为HTTP代理不涉及SSL握手环节,不需要证书。
4. 额外的兼容性调整
你的Manifest里minimum_chrome_version设为22.0.0完全不合理——Manifest V3要求Chrome 88及以上版本,建议改成"minimum_chrome_version": "88.0.0",避免出现兼容性报错。
内容的提问来源于stack exchange,提问作者Yuri
相关产品推荐
相关产品推荐

