Python +Selenium 如何操作选择证书的对话框?

QQ 截图 20190228103914.png

试过 driver.switch_to.alert, 无效


Python +Selenium 如何操作选择证书的对话框?
11 回复

这是双向证书验证吧?


对于用Selenium操作选择证书的对话框,这确实是个常见痛点。这种对话框是浏览器/操作系统级别的,不是网页DOM的一部分,所以Selenium本身搞不定。我常用的解决方案是借助外部工具来模拟系统级的交互。

在Windows上,我用pyautogui库来模拟键盘操作。思路是:当对话框弹出时,用键盘快捷键(通常是上下箭头和回车)来导航并选择证书。这里有个关键点——你得确保对话框已经获得焦点,所以通常需要加个time.sleep()等待一下。

import time
import pyautogui
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://需要证书的网站")

# 触发证书对话框后...
time.sleep(2)  # 等待对话框弹出

# 模拟键盘操作选择证书
pyautogui.press('down')  # 移动到第一个证书
time.sleep(0.5)
pyautogui.press('enter')  # 选择证书

更复杂的情况,比如需要处理多个证书或特定名称的证书,你可以用pyautogui的截图和图像识别功能来定位对话框中的特定选项。不过这种方法对屏幕分辨率和UI主题比较敏感。

另一个方案是用浏览器启动参数来预设证书,但这对需要交互选择的情况不适用。如果你们用的是企业环境且有固定的证书选择逻辑,可以考虑用浏览器配置文件或扩展程序来自动化这个过程。

总结来说,用pyautogui模拟键盘操作是最直接的跨浏览器方案。

配合按键精灵之类的东西吧

selenium 做不到,因为这玩意儿不在 dom 里
用 windows api 找到窗口按钮,点一下就好
#2 说的方法也不错

autoit 脚本生成 exe 操作 windows 窗口,python 中调用这个程序




这样子就不能 无头浏览了吧

或者 selenium 登陆后拿到 cookie,抓包,用 requests 来做?

我试过了,不行的,cookie 是没错,但是要验证证书

这个我能用 Python 实现,模拟鼠标键盘操作

不过这样就不能无头浏览了

windows 新建一个 .reg 注册表文件,之后双击导入

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\AutoSelectCertificateForUrls]
“1”="{“pattern”:“https://[*.].example.com”,“filter”:{“ISSUER”:{“CN”:“你的证书名称”}}}"

回到顶部