You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Python如何操作A1数字证书弹窗完成E-CAC登录

问题原因

你遇到的数字证书选择弹窗不属于网页DOM范畴,是Chrome浏览器触发的系统级安全弹窗,Selenium、undetected_chromedriver这类基于网页DOM操作的工具,无法直接通过Xpath、CSS选择器定位弹窗内的元素,这也是你现有代码无法完成证书选择的核心原因。

可行解决方案

你可以根据自己的使用场景二选一:

方案1:启动浏览器时预加载指定证书,直接跳过弹窗

这是稳定性最高的方案,不需要额外处理弹窗逻辑,通过Chrome启动参数提前绑定要使用的数字证书,当网站发起证书认证请求时,浏览器会自动调用预配置的证书完成校验,全程不会弹出选择窗口。
修改后的可运行代码如下:

import undetected_chromedriver as uc
import time
from selenium.webdriver.common.by import By

def ecac():
    options = uc.ChromeOptions()
    # 替换为你本地导出的pfx格式数字证书的绝对路径
    CERT_PATH = "D:/certs/your_ecac_cert.pfx"
    # 替换为导出证书时设置的密码
    CERT_PASSWORD = "your_cert_password"
    
    # 配置证书自动加载参数
    options.add_argument(f"--client-certificate={CERT_PATH}")
    options.add_argument(f"--certificate-password={CERT_PASSWORD}")
    options.add_argument("--disable-popup-blocking")
    options.headless = False

    driver = uc.Chrome(options=options)
    driver.get("https://cav.receita.fazenda.gov.br/autenticacao/login")
    driver.implicitly_wait(20)

    # 点击证书登录入口
    driver.find_element(By.XPATH, '//*[@id="login-dados-certificado"]/p[2]/input').click()
    time.sleep(3)
    driver.find_element(By.XPATH, '//*[@id="cert-digital"]/a').click()

    # 等待证书自动完成校验、页面跳转即可
    time.sleep(5)

if __name__ == '__main__':
    ecac()

注意:使用该方案需要先将系统中安装的数字证书导出为.pfx格式,导出时必须勾选“导出私钥”选项,同时设置证书密码,否则参数无法正常加载证书。

方案2:通过UI自动化工具直接操作系统弹窗

如果你不想导出本地证书文件,可以借助Windows平台的UI自动化库pywinauto,直接识别并操作弹出的证书选择窗口,模拟人工选择证书、点击确认的操作。
操作步骤:

  • 先安装依赖库:执行命令pip install pywinauto
  • 在触发证书弹窗的代码后,追加UI控制逻辑,核心代码参考:
from pywinauto import Application
import time

# 点击证书登录按钮触发弹窗后,等待窗口加载完成
time.sleep(2)
# 连接到系统弹出的证书选择窗口,title_re根据你系统的语言调整,中文系统匹配「选择证书」,葡语系统匹配对应语言的窗口标题
app = Application(backend="uia").connect(title_re=".*选择证书.*", timeout=10)
cert_window = app.window(title_re=".*选择证书.*")
# 替换为你自己的数字证书显示名称,选中对应证书
cert_window.ListBox.get_item("你的数字证书完整名称").select()
# 点击确认按钮完成选择
cert_window.OK.click()

注意:该方案对系统窗口标题、控件文本的匹配要求较高,如果你的系统不是中文环境,需要把窗口标题、按钮文本替换为对应系统语言的内容;脚本运行时不要最小化Chrome窗口,否则可能出现控件定位失败的问题。

调试注意事项
  • 触发证书弹窗后不要立刻执行后续操作,预留1-3秒等待窗口加载完成
  • 如果方案1的启动参数不生效,先把Chrome升级到最新稳定版,旧版本Chrome对客户端证书启动参数的支持存在兼容问题
  • 不要用无头模式跑证书登录流程,部分版本Chrome在无头模式下会直接拦截客户端证书请求

内容的提问来源于stack exchange,提问作者Victor Hugo Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:15:44