Playwright Python 中处理 HTTPS 证书错误的正确方法

发布时间 - 2025-12-26 00:00:00    点击率:

在使用 playwright(尤其是 webkit 或 firefox)访问存在自签名、过期或无效 https 证书的网站时,常会触发 “ssl peer certificate or ssh remote key was not ok” 错误;通过 `ignore_https_errors=true` 配置浏览器上下文可安全绕过该验证。

Playwright 默认对 HTTPS 连接执行严格的 TLS 证书校验,当目标网站使用自签名证书、证书链不完整、域名不匹配或证书已过期时,WebKit 和 Firefox 后端会直接拒绝连接并抛出 SSL peer certificate or SSH remote key was not OK 异常(注意:Chromium 在较新版本中默认允许部分不安全证书,但行为仍可能因系统策略而异)。

关键修复点在于:ignore_https_errors=True 必须作用于 browser.new_context() 或 browser.new_page() 级别,而非 browser.launch()。这是因为证书验证发生在页面导航(page.goto())阶段,由上下文(Context)控制网络请求策略。

✅ 正确用法示例:

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        # 推荐:使用 webkit(问题复现场景)或 firefox
        browser = await p.webkit.launch(headless=False)
        # ✅ 关键:在 new_context 中启用忽略 HTTPS 错误
        context = await browser.new_context(ignore_https_errors=True)
        page = await context.new_page()

        # 现在可正常访问含无效证书的 HTTPS 站点(如测试环境、内网系统)
        await page.goto("https://minha.anem.dz/pre_inscription")  # 注意:原示例写的是 http://,但错误提示表明实际请求的是 HTTPS

        # 可选:打印标题验证加载成功
        title = await page.title()
        print(f"Page title: {title}")

        await browser.close()

asyncio.run(main())

⚠️ 注意事项:

  • ignore_https_errors=True 仅适用于开发、测试或可信内网环境,生产环境切勿启用,否则将导致中间人攻击(MitM)风险;
  • 该参数不影响 HTTP(非加密)请求,仅作用于 HTTPS/TLS 层;
  • 若仍报错,请确认 URL 协议是否为 https://(常见误区:错误地对 HTTPS 站点使用 http:// 前缀,或服务端强制跳转 HTTPS);
  • WebKit 对证书异常更敏感,因此该问题在 playwright.webkit 中最常出现;Chromium 用户若遇同类错误,也需同样配置上下文;
  • 如需进一步调试,可配合 --ignore-certificate-errors 启动参数(仅 Chromium)或启用 page.on("response", ...) 监听网络响应状态。

总结:证书验证失败不是 Playwright 的 Bug,而是其安全默认策略的体现。合理使用 ignore_https_errors=True 是自动化测试中处理非生产环境 HTTPS 问题的标准实践——前提是明确风险并严格限定使用场景。


# python  # go  # 浏览器  # ssl  # 后端  # ai 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel如何自定义分页视图?(Pagination示例)  青岛网站建设如何选择本地服务器?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  如何用腾讯建站主机快速创建免费网站?  千库网官网入口推荐 千库网设计创意平台入口  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  Mybatis 中的insertOrUpdate操作  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  java获取注册ip实例  如何在万网自助建站中设置域名及备案?  android nfc常用标签读取总结  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  如何快速辨别茅台真假?关键步骤解析  如何快速搭建高效可靠的建站解决方案?  JavaScript数据类型有哪些_如何准确判断一个变量的类型  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  jQuery中的100个技巧汇总  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  网站图片在线制作软件,怎么在图片上做链接?  iOS发送验证码倒计时应用  韩国服务器如何优化跨境访问实现高效连接?  如何撰写建站申请书?关键要点有哪些?  如何在Windows环境下新建FTP站点并设置权限?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  进行网站优化必须要坚持的四大原则  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  如何在云服务器上快速搭建个人网站?  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  Laravel如何使用Vite进行前端资源打包?(配置示例)  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  高端建站三要素:定制模板、企业官网与响应式设计优化  做企业网站制作流程,企业网站制作基本流程有哪些?  详解jQuery停止动画——stop()方法的使用  Laravel定时任务怎么设置_Laravel Crontab调度器配置  简历在线制作网站免费版,如何创建个人简历?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何快速上传建站程序避免常见错误?  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  EditPlus中的正则表达式 实战(4)