如何通过Python Selenium访问Chrome开发者工具Security面板?
获取Chrome DevTools Security面板安全信息的实现方法
现有代码仅配置了浏览器控制台日志的抓取权限,要拿到HTTPS连接状态、TLS证书状态这类Security面板的信息,不需要模拟打开DevTools点击对应标签,直接通过Chrome DevTools Protocol(CDP)调用Chrome内置的Security域接口,即可拿到和面板展示完全一致的数据,Selenium 4+版本原生支持CDP调用。
Security面板参考

原有控制台日志抓取参考代码
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import time yoururl = "test_url" caps = DesiredCapabilities.CHROME caps['goog:loggingPrefs'] = {'browser': 'ALL'} # driver = webdriver.Chrome(desired_capabilities=caps) driver = webdriver.Chrome('path_of_chromedriver', desired_capabilities=caps) driver.get(yoururl) time.sleep(5) # wait for all the data to arrive. for log in driver.get_log('browser'): print(log) driver.close()
改造后支持安全信息抓取的代码
前置要求:安装Selenium 4及以上版本,旧版本无原生CDP支持,需要额外引入第三方CDP客户端库,不推荐使用。
改造逻辑为通过CDP启用Security域,监听安全状态变更事件,页面加载完成后主动拉取全量安全详情,原有控制台日志抓取逻辑可完全保留:
from selenium import webdriver import time yoururl = "test_url" chrome_driver_path = "path_of_chromedriver" # 初始化浏览器,保留原有控制台日志抓取配置 options = webdriver.ChromeOptions() options.set_capability('goog:loggingPrefs', {'browser': 'ALL'}) driver = webdriver.Chrome(executable_path=chrome_driver_path, options=options) # 如需测试自签名证书等异常场景,可放开下面注释忽略证书错误 # driver.execute_cdp_cmd("Security.setIgnoreCertificateErrors", {"ignore": True}) # 启动CDP会话,启用Security域 driver.execute_cdp_cmd("Security.enable", {}) security_info = {} # 定义安全状态变更回调,实时捕获状态变化 def capture_security_state(params): security_info["connection_state"] = params.get("securityState") security_info["state_summary"] = params.get("summary") security_info["security_issues"] = params.get("securityStateIssueIds") # 注册安全状态事件监听 driver.add_cdp_listener("Security.securityStateChanged", capture_security_state) driver.get(yoururl) time.sleep(5) # 主动拉取当前页面的证书详情、连接安全信息 visible_security_detail = driver.execute_cdp_cmd("Security.getVisibleSecurityState", {}) security_info["certificate_detail"] = { "cert_raw_data": visible_security_detail.get("certificate"), "cert_trust_status": visible_security_detail.get("securityState"), "cert_transparency_status": visible_security_detail.get("sct"), "mixed_content_status": visible_security_detail.get("mixedContentType"), } # 原有控制台日志打印逻辑保留 print("=== 浏览器控制台日志 ===") for log in driver.get_log('browser'): print(log) print("\n=== 页面安全信息 ===") print(f"HTTPS连接状态: {security_info.get('connection_state')}") print(f"安全状态说明: {security_info.get('state_summary')}") print(f"检测到的安全问题: {security_info.get('security_issues')}") print(f"TLS证书核心信息: {security_info.get('certificate_detail')}") driver.quit()
返回字段说明
- 连接状态判断:
securityState返回secure即为合法可信的HTTPS连接,其余值分别对应证书过期、域名不匹配、混合内容、证书不受信等异常场景,和Security面板顶部的彩色状态提示完全对应 - 证书信息:
certificate字段返回DER编码的证书原始内容,可通过pyOpenSSL等证书解析库提取签发机构、有效期、公钥算法、SAN域名匹配列表等全量证书字段 - 状态匹配:所有返回字段和Security面板展示的「连接安全状态」「证书有效性」「资源安全状态」三类信息一一对应,不需要额外做映射转换
内容的提问来源于stack exchange,提问作者AHua Hsu
相关产品推荐
相关产品推荐

