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

使用C# Selenium登录含CSRF/Antiforgerytoken的网页遇阻求助

解决Selenium登录含CSRF/AntiforgeryToken站点的问题

针对含CSRF Token的站点

  1. 确保Token已加载并正确提交
    页面加载时会生成CSRF Token,通常是隐藏的<input>标签(name可能为csrf_token、_csrf等)。必须等这个元素完全渲染后再提交表单:

    • 用显式等待定位Token元素:
      var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
      var csrfTokenElement = wait.Until(d => d.FindElement(By.Name("csrf_token")));
      var csrfToken = csrfTokenElement.GetAttribute("value");
      
    • 输入账号密码后,优先点击页面自带的提交按钮(Selenium会自动携带表单内的所有隐藏字段,包括Token),避免手动构造JS提交时遗漏参数。
    • 如果必须用JS提交,要确保FormData包含Token:
      var js = (IJavaScriptExecutor)driver;
      js.ExecuteScript(@"
          var form = document.querySelector('form[action*=""login""]');
          var formData = new FormData(form);
          fetch(form.action, {
              method: 'POST',
              body: formData,
              credentials: 'include'
          });
      ");
      
  2. 排查输入延迟问题
    若提示“缺少登录数据”,可能是输入速度过快导致页面未同步,改用Actions类模拟真实输入:

    var actions = new Actions(driver);
    actions.SendKeys(userNameInput, "your_username")
           .Pause(TimeSpan.FromMilliseconds(500))
           .SendKeys(passwordInput, "your_password")
           .Pause(TimeSpan.FromMilliseconds(500))
           .Click(submitBtn)
           .Perform();
    

针对含AntiforgeryToken的站点(ASP.NET类站点)

这类Token需要表单字段与Cookie值匹配,直接点击按钮刷新可能是Token未正确关联:

  1. 确认Token和Cookie都被正确获取
    页面中通常有name为__RequestVerificationToken的隐藏输入,同时浏览器会有对应的Cookie。先等待元素加载:
    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    var antiforgeryElement = wait.Until(d => d.FindElement(By.Name("__RequestVerificationToken")));
    
  2. 避免页面意外刷新
    有些站点会在输入时触发动态操作,导致Token失效。输入时不要快速连续操作,每次输入后加短暂停顿。
  3. 用JS提交时强制绑定Token
    若点击按钮无效,尝试用JS提交并确保Token值正确传入:
    var tokenValue = antiforgeryElement.GetAttribute("value");
    var js = (IJavaScriptExecutor)driver;
    js.ExecuteScript(@"
        var form = document.getElementById('loginForm');
        form.__RequestVerificationToken.value = arguments[0];
        form.submit();
    ", tokenValue);
    

通用排查要点

  • 检查是否有嵌套iframe:若登录表单在iframe内,需先切换上下文:driver.SwitchTo().Frame("iframe-id");
  • 对齐浏览器UA:将Selenium的User-Agent设置为原VBA爬虫使用的UA,避免站点识别差异:
    var options = new ChromeOptions();
    options.AddArgument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..."); // 替换为VBA的UA
    var driver = new ChromeDriver(options);
    
  • 禁用自动填充:有些浏览器自动填充会干扰字段值,可通过Options关闭:options.AddArgument("--disable-autofill");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:46:03