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

除禁用测试环境MFA外,如何实现Selenium测试的MFA自动化或绕过?

带MFA的网站自动化测试解决方案(无需禁用MFA)

1. 基于TOTP算法自动生成验证码

Microsoft Authenticator的MFA验证码基于**TOTP(基于时间的一次性密码)**算法生成,只要拿到测试账号的MFA密钥(即设置Authenticator时扫描的二维码对应的字符串,可在账号MFA设置中选择「查看密钥」获取),就能用代码实时生成有效验证码。

用Python的pyotp库即可快速实现:

import pyotp
# 替换为你的测试账号MFA密钥
totp = pyotp.TOTP("JBSWY3DPEHPK3PXP")
current_code = totp.now()
# 将current_code传入Selenium脚本,输入到MFA验证码输入框

⚠️ 注意:MFA密钥属于敏感信息,禁止硬编码在脚本中,建议用环境变量或加密配置文件存储。

2. 微软Graph API获取验证码(企业Azure AD账号适用)

如果是企业级Azure AD测试账号,可通过微软Graph API调用获取验证码,前提是提前为Azure AD应用配置UserAuthenticationMethod.ReadWrite.All权限:

调用以下接口即可生成并获取验证码:

GET https://graph.microsoft.com/v1.0/users/{用户ID}/authentication/totpMethods/{TOTP方法ID}/generateVerificationCode

解析接口返回的结果,将验证码传入自动化脚本使用即可。

3. 持久化浏览器会话绕过重复MFA

如果测试流程不需要每次重新登录,可保存首次登录(完成MFA验证后)的浏览器会话数据(Cookies、本地存储),后续测试直接加载会话即可跳过MFA步骤:

第一步:导出登录会话Cookies

手动完成登录和MFA验证后,执行以下代码导出Cookies:

import json
from selenium import webdriver

driver = webdriver.Chrome()
# 手动完成登录流程后执行
cookies = driver.get_cookies()
with open("test_session_cookies.json", "w") as f:
    json.dump(cookies, f)
driver.quit()

第二步:加载会话跳过登录

后续自动化测试时,直接加载保存的Cookies:

driver = webdriver.Chrome()
driver.get("目标网站首页")
with open("test_session_cookies.json", "r") as f:
    cookies = json.load(f)
for cookie in cookies:
    driver.add_cookie(cookie)
driver.refresh()
# 刷新后直接进入已登录状态,无需重复登录和MFA验证

⚠️ 注意:会话存在有效期,到期后需重新手动登录更新Cookies。

4. 换用更适配的自动化工具

  • Playwright:自带浏览器上下文保存功能,处理会话持久化比Selenium更便捷,同时可轻松集成TOTP生成逻辑
  • Cypress:支持缓存登录会话,还能通过自定义命令实现验证码自动输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:03