除禁用测试环境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
相关产品推荐
相关产品推荐

