12

当我用 selenium webdriver 打开一个页面时,我得到一个 chrome 对话框“选择证书”。默认证书是正确的,所以我只需单击“确定”按钮。但我有这个问题。我有python代码:

drv = webdriver.Chrome()   
drv.get("https://example.com/login")

之后我想做类似的事情:

drv.switch_to_alert().accept()

或者

drv.switch_to_alert().send_keys(Keys.TAB)
drv.switch_to_alert().send_keys(Keys.SPACE)

问题是代码在 drv.get(" https://example.com/login ") 行停止执行。Webdriver 正在等待页面加载。在该行之前没有 chrome 对话框。

我该如何处理?

4

4 回答 4

4

你必须使用 AutoIT 之类的东西:

http://www.autoitscript.com/site/autoit/

你为什么问?这是一个 OS 对话框,Selenium 不会也可能永远不会处理,因此您必须求助于其他解决方案(例如,在 C# 中,您应该使用本机 Win32 API 方法来单击按钮)。

于 2013-02-20T09:44:32.673 回答
2

证书由操作系统管理,而不是浏览器。从浏览器的证书存储中删除除必要证书之外的所有证书,然后将浏览器配置为在仅存在一个证书时自动选择证书。您还可以创建浏览器配置文件并让您的程序启动此配置文件或避免通过 HTTPS 进行测试。

于 2015-05-20T00:22:06.530 回答
2

在此处处理任何内容之前,请在下面添加,以便在您导航/触发证书弹出时它不会被冻结。请记住稍后添加正确的等待时间。

 getDriver().manage().timeouts().pageLoadTimeout(1000, TimeUnit.MILLISECONDS); 

在此之后,您可以尝试使用键盘或 autoIt 等等。

于 2017-08-30T17:24:03.970 回答
0

您可以为 Chrome 配置您的策略组,选择您的证书。

Chrome 使用带有您证书信息的 json 注册表。配置 gpo 后,想办法用 Python 修改这个 json。

使用 C#,我使用 Microsoft.Win32.Registry 来操作注册表。

请按照以下步骤配置您的 gpo:

首先我要感谢IngussNeilands在他的 Github 上提供的教程。它救了我!您可以在此处按照IngussNeilands 教程中的步骤进行操作,或按照下面的他的教程版本进行操作。## 配置策略组的步骤
  1. 从此处下载 Chrome 政策模板:http: //dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip

  2. 解压.zip文件并找到chrome.adm与您的 Windows 上的国家和语言设置相匹配的文件,遵循以下路径:policy_templates\windows\adm\<YourCountryAndLanguage>\chrome.adm

  3. "run"在 Windows 搜索栏中键入或按Windows + R。然后输入 de 命令gpedit.msc打开本地组策略编辑器

  4. 现在,访问:'Computer Policy>> Computer Configuration'并右键单击该文件'Administrative Templates'并选择'Add or remove tamplates'

  5. 单击'add'并导航到chrome.adm您之前在 上选择的 'policy_templates\windows\adm\<YourCountryAndLanguage>\chrome.adm'。点击打开

  6. 现在,导航到: 'Computer Policy>> Computer Configuration>> Administrative Templates>> Classic Administrative Templates(ADM)>> Google>> Google Chrome>> Content Settings'

  7. 然后在窗口的右侧找到并双击该选项'Automatically select client certificates for these sites'

  8. 点击'Enabled'选项

  9. 现在,单击'Show...'下面选项窗格中的

  10. 将以下内容复制并粘贴到'JSON'Value: 列的行中 {"pattern":"https://[*.]example.com","filter":{"ISSUER":{"CN":"example.com"}, "SUBJECT":{"CN":"value"}}。此 JSON 需要用您的证书信息重写

如何重写 Chrome 配置 JSON

好的,现在就给大家简单解释一下如何重写 Chrome Config JSON。

在“模式”键中,值需要是证书将被发送到的 URL。在大多数情况下,此 URL 与页面的 URL 相同,但某些站点不使用相同的 URL 库来发送证书。例如,当我尝试在Uberlândia市对 NFS-e 进行网络抓取时,我需要调试页面脚本以找到发送证书的 URL。

“过滤器”键将包含证书信息。就我而言,我需要使用不同的证书访问同一个网站,因为我必须用“ISSUER”和“SUBJECT”的信息填充 JSON。Chrome 会选择一个与过滤键中的信息内容匹配的证书。例如,如果我用“SERASA Certificadora Digital v5”填充“ISSUER”对象的“CN”,我将拥有多个包含这些信息的证书,Chrome 将无法选择正确的证书。

在我的 git 中您可以找到更改 JSON 以使用多个证书访问同一站点的解决方案。

于 2021-10-27T01:54:32.053 回答