You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

咨询:Mac系统下Selenium自动化Chrome浏览器CA证书自动选择方案

我之前也碰到过这个头疼的问题!Chrome处理客户端证书的自动选择确实有点 tricky,尤其是在macOS钥匙串环境下。给你几个亲测有效的方案,你可以挨个试试:

方案1:配置Chrome启动参数指定证书规则

Chrome支持通过启动参数直接设置自动选择证书的逻辑,步骤如下:

  • 先获取钥匙串中证书的SHA-1指纹:打开钥匙串访问,找到目标证书右键「显示简介」,在「指纹」栏复制SHA-1值(记得去掉中间的空格)。
  • 在初始化ChromeDriver时添加对应参数:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 替换成你的证书SHA-1指纹
cert_fingerprint = "AA:BB:CC:DD:...(你的指纹)"
chrome_options.add_argument(
    f'--auto-select-certificate-for-urls={{"pattern":"*","filter":{{"SHA-1":["{cert_fingerprint.replace(":","")}"]}}}}'
)

driver = webdriver.Chrome(options=chrome_options)
driver.get("你的目标Web应用URL")

这个参数会告诉Chrome,对所有URL自动匹配指定SHA-1的证书,直接跳过选择弹窗。

方案2:复用Chrome用户数据目录

如果方案1无效,大概率是Chrome没有读取到钥匙串的证书偏好,这时候可以直接复用你日常手动使用的Chrome用户数据目录——这个目录已经保存了你手动选择证书的历史设置:

  • 找到你的Chrome用户数据路径:
    • macOS:~/Library/Application Support/Google/Chrome/Default
    • Windows:C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data\Default
  • 在代码中指定该目录:
chrome_options = Options()
# macOS示例路径,替换成你的实际路径
chrome_options.add_argument('--user-data-dir=/Users/你的用户名/Library/Application Support/Google/Chrome')
chrome_options.add_argument('--profile-directory=Default')

driver = webdriver.Chrome(options=chrome_options)

这样启动的Chrome会和你手动打开的完全一致,已经记住了证书选择偏好,不会再弹出选择框。

方案3:调整钥匙串证书的信任级别

有时候证书的信任设置不够,会导致Chrome无法自动选择。你可以这样修改:

  • 打开钥匙串访问,找到目标证书右键「显示简介」
  • 切换到「信任」标签页,在「使用此证书时」下拉菜单选择「始终信任」
  • 输入系统密码确认修改,然后重启Chrome和自动化脚本
方案4:通过Chrome DevTools协议(CDP)注入证书选择

如果上面的方法都不行,还可以用CDP命令直接强制指定证书:

# 先启动driver
driver = webdriver.Chrome(options=chrome_options)
# 从钥匙串证书简介中获取以下信息
driver.execute_cdp_cmd('Network.setClientCertificate', {
    'origin': '你的Web应用域名(比如https://your-app.com)',
    'certificate': {
        'issuer': '证书颁发者名称',
        'subject': '证书主体名称',
        'serialNumber': '证书序列号',
        'validFrom': '证书生效日期(格式如20230101000000Z)',
        'validTo': '证书过期日期'
    }
})
driver.get("你的目标URL")

内容的提问来源于stack exchange,提问作者yhe_g

火山引擎 最新活动