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
相关产品推荐
相关产品推荐

