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

Playwright如何通过代码绕过Fido2 u2f验证免除手动操作

Playwright无头模式自动完成FIDO2/U2F验证的实现方案

无需实体U2F硬件、无需手动触摸设备的纯代码方案可直接落地,核心是调用Playwright基于CDP实现的内置虚拟WebAuthn认证器能力,全程支持headless模式运行。

  • 前置配置:在创建浏览器上下文阶段提前挂载虚拟认证器
    不要等页面触发U2F校验流程后再配置,必须在上下文初始化完成后第一时间开启WebAuthn虚拟环境,Python版本示例代码如下,Node/Java/C#版本API逻辑完全一致:
    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as p:
        # 直接启动无头模式,不需要打开可见窗口
        browser = p.chromium.launch(headless=True)
        context = browser.new_context()
        # 初始化CDP会话绑定当前上下文
        if not context.pages:
            context.new_page()
        cdp_session = context.new_cdp_session(context.pages[0])
        # 开启WebAuthn虚拟能力
        cdp_session.send("WebAuthn.enable")
        # 添加兼容U2F/FIDO2的虚拟认证器
        auth_info = cdp_session.send("WebAuthn.addVirtualAuthenticator", {
            "protocol": "ctap2", # 仅兼容老U2F站点时可替换为"u2f"
            "transport": "usb",
            "hasResidentKey": False,
            "hasUserVerification": False,
            # 核心配置:自动模拟用户触摸硬件密钥的确认动作,完全跳过手动操作
            "automaticPresenceSimulation": True
        })
        authenticator_id = auth_info["authenticatorId"]
    
        # 后续正常写页面跳转、点击等自动化逻辑即可
        page = context.pages[0]
        page.goto("目标站点地址")
        # 触发U2F验证时虚拟认证器会自动完成响应,不会阻塞流程
    
  • 持久化登录配置(可选)
    如果需要跳过重复的U2F注册流程,可以在首次完成U2F注册后,调用WebAuthn.getCredentials接口导出虚拟认证器内存储的校验凭证,后续运行自动化脚本时提前通过WebAuthn.addCredential接口导入对应凭证,即可直接通过U2F登录校验,不需要重复走注册流程。

避坑提示:不要尝试在无头模式下映射实体U2F硬件,无头环境下USB权限、系统层硬件通信通道的适配问题极多,虚拟认证器是浏览器官方提供的标准测试能力,完全符合FIDO2/U2F协议规范,适配所有标准实现的验证站点。
如果部分站点做了特殊的传输类型校验,可根据实际情况调整transport参数为nfc/ble/internal匹配站点校验规则。

内容的提问来源于stack exchange,提问作者horse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.12 16:15:51