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

Selenium自动化中Windows身份验证弹窗问题

Chrome身份验证弹窗Selenium C#处理方案

1. 用Chrome扩展注入认证头

编写一个极简Chrome扩展,在请求时自动添加Authorization头,绕过系统认证弹窗:

  • 新建扩展文件夹,创建manifest.json:
    {
      "manifest_version": 3,
      "name": "Auth Inject",
      "version": "1.0",
      "permissions": ["webRequest", "webRequestBlocking", "<all_urls>"],
      "background": {
        "service_worker": "background.js"
      }
    }
    
  • 同目录创建background.js:
    chrome.webRequest.onBeforeSendHeaders.addListener(
      details => {
        const auth = "Basic " + btoa("你的用户名:你的密码");
        details.requestHeaders.push({name: "Authorization", value: auth});
        return {requestHeaders: details.requestHeaders};
      },
      {urls: ["https://目标域名.com/*"]},
      ["blocking", "requestHeaders"]
    );
    
  • C#代码中加载该扩展:
    ChromeOptions options = new ChromeOptions();
    options.AddExtension(@"扩展文件夹的绝对路径");
    IWebDriver driver = new ChromeDriver(options);
    driver.Navigate().GoToUrl("https://目标域名.com");
    

2. 通过Chrome DevTools Protocol(CDP)注入头

Selenium 4及以上版本支持直接调用CDP接口,导航前注入认证信息:

var driver = new ChromeDriver();
var cdpSession = ((IDevTools)driver).CreateDevToolsSession();

var authHeader = Convert.ToBase64String(Encoding.ASCII.GetBytes("你的用户名:你的密码"));
var headers = new Dictionary<string, object> { {"Authorization", $"Basic {authHeader}"} };

cdpSession.Network.SetExtraHTTPHeaders(new Network.SetExtraHTTPHeadersCommandSettings { Headers = headers });

driver.Navigate().GoToUrl("https://目标域名.com");

3. 调用Windows API模拟弹窗输入

如果上述方法无效,直接用C#调用系统API定位弹窗并输入:

using System;
using System.Runtime.InteropServices;
using System.Threading;

public class AuthPopupHandler
{
    [DllImport("user32.dll", SetLastError = true)]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern void SendKeys(IntPtr hWnd, string keys);

    public static void FillAuthPopup()
    {
        // 弹窗标题根据实际情况修改,比如"Windows Security"或"身份验证"
        IntPtr popupHandle = FindWindow(null, "Windows Security");
        if (popupHandle != IntPtr.Zero)
        {
            SetForegroundWindow(popupHandle);
            Thread.Sleep(500);
            SendKeys(popupHandle, "你的用户名{TAB}你的密码{ENTER}");
        }
    }
}

// 脚本中调用:
driver.Navigate().GoToUrl("https://目标域名.com");
AuthPopupHandler.FillAuthPopup();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:01:11