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

基于双因素认证的Selenium+C#自动化测试问题咨询

应对双因素认证的Selenium自动化测试方案(C#/VS环境)

针对你遇到的平台新增双因素认证后无法继续Selenium自动化测试的问题,这里分享几个实用的解决思路:

1. 申请测试专用账号绕过2FA

这是最省心的方案,直接和开发、运维团队沟通:

  • 要求创建一批无需双因素认证的测试专用账号,或者在后台配置测试IP/特定账号的白名单,跳过2FA校验。
  • 这样你的原有登录代码完全不用改,直接用测试账号执行即可:
// 原有登录代码,直接使用测试账号
driver.FindElement(By.Id("email")).SendKeys("test-auto@yourplatform.com");
driver.FindElement(By.Id("password")).SendKeys("Test@1234");
driver.FindElement(By.CssSelector("button[type='submit']")).Click();

2. 自动生成TOTP验证码(适用于Google Authenticator类2FA)

如果平台用的是基于时间的一次性密码(TOTP),可以用C#库直接生成验证码:

  1. 先通过NuGet安装OTP.NET包:Install-Package OTP.NET
  2. 从测试账号的2FA设置中导出密钥(注意不要硬编码,存在配置文件或环境变量里)
  3. 代码中生成并填入验证码:
using OtpNet;
using Base32;

// 从配置读取2FA密钥
var base32Secret = Base32Encoding.ToBytes(ConfigurationManager.AppSettings["TestAccount2FASecret"]);
var totpGenerator = new Totp(base32Secret);
string currentOtp = totpGenerator.ComputeTotp();

// 先完成邮箱密码登录
driver.FindElement(By.Id("email")).SendKeys("user@yourplatform.com");
driver.FindElement(By.Id("password")).SendKeys("YourPassword");
driver.FindElement(By.Id("login-btn")).Click();

// 等待2FA输入框加载,填入验证码
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
var otpInput = wait.Until(d => d.FindElement(By.Id("otp-code")));
otpInput.SendKeys(currentOtp);
driver.FindElement(By.Id("verify-otp")).Click();

3. 自动读取邮箱/短信验证码

如果2FA是通过邮箱或短信发送验证码,可以自动读取并提取:

邮箱示例(以Exchange邮箱为例)

  1. 安装NuGet包:Install-Package Microsoft.Exchange.WebServices.Managed.Api
  2. 代码连接邮箱,搜索最新的2FA邮件并提取验证码:
using Microsoft.Exchange.WebServices.Data;
using System.Text.RegularExpressions;

// 初始化Exchange服务
var exchangeService = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
exchangeService.Credentials = new WebCredentials("test-mail@yourdomain.com", "MailPassword");
exchangeService.AutodiscoverUrl("test-mail@yourdomain.com", url => url.StartsWith("https://"));

// 获取收件箱最新的1封邮件
var itemView = new ItemView(1) { OrderBy = { { ItemSchema.DateTimeReceived, SortDirection.Descending } } };
var latestEmails = exchangeService.FindItems(WellKnownFolderName.Inbox, itemView);

if (latestEmails.Count > 0)
{
    var otpEmail = EmailMessage.Bind(exchangeService, latestEmails[0].Id);
    // 用正则匹配6位验证码(根据实际邮件内容调整正则)
    var codeMatch = Regex.Match(otpEmail.Body.Text, @"\b\d{6}\b");
    if (codeMatch.Success)
    {
        // 填入页面的2FA输入框
        var otpInput = driver.FindElement(By.Id("otp-input"));
        otpInput.SendKeys(codeMatch.Value);
        driver.FindElement(By.Id("submit-otp")).Click();
    }
}

短信方案

可以使用支持API的短信接收服务(注意合规性),调用其API获取最新短信并提取验证码,逻辑和邮箱类似。

4. 复用浏览器已登录会话

提前手动完成一次登录(包括2FA),保存浏览器的配置文件,Selenium启动时加载该配置,直接复用登录状态:

Chrome示例

var chromeOptions = new ChromeOptions();
// 指定你的Chrome用户数据目录和配置文件(路径根据实际情况修改)
chromeOptions.AddArgument(@"user-data-dir=C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data");
chromeOptions.AddArgument(@"profile-directory=Profile 2");

// 加载配置文件启动Chrome,直接进入已登录状态
var driver = new ChromeDriver(chromeOptions);
driver.Navigate().GoToUrl("https://your-portal-url.com");

注意:启动Selenium前要关闭所有手动打开的Chrome窗口,避免进程冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:00:40