Selenium C#访问NSEIndia接口出现‘资源未找到’错误求助
问题解决:Selenium C#访问NSE API出现"Resource not found"
核心原因分析
NSE的API接口带有反爬检测机制,仅设置Referrer不足以通过验证,主要检测点包括:
- 请求的
User-Agent是否为真实浏览器标识(Selenium默认UA含自动化特征) - 是否存在有效的会话Cookie(直接访问API未建立网站会话)
- 页面的
navigator.webdriver属性暴露了Selenium自动化身份
修改后的C#代码实现
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.DevTools.Network; using System.Collections.Generic; using System.Threading; class Program { static void Main(string[] args) { ChromeOptions options = new ChromeOptions(); options.AddArguments("--start-maximized"); // 排除自动化相关开关与扩展 options.AddExcludedArguments(new List<string> { "enable-automation" }); options.AddAdditionalOption("useAutomationExtension", false); // 设置真实浏览器的User-Agent string userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"; options.AddArgument($"--user-agent={userAgent}"); // 设置Referrer options.AddAdditionalOption("chrome.page.customHeaders.referrer", "https://www.nseindia.com"); using (var driver = new ChromeDriver(options)) { // 通过Chrome DevTools Protocol隐藏webdriver标识 var devTools = driver.CreateDevToolsSession(); devTools.Network.SetUserAgentOverride(new SetUserAgentOverrideCommandSettings { UserAgent = userAgent }); devTools.ExecuteDevToolsCommand("Page.addScriptToEvaluateOnNewDocument", new Dictionary<string, object> { ["source"] = @" Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); " }); // 先访问NSE主页建立会话,获取必要Cookie driver.Navigate().GoToUrl("https://www.nseindia.com"); // 等待页面加载完成(推荐用WebDriverWait替代Thread.Sleep) Thread.Sleep(3000); // 再请求API接口 driver.Navigate().GoToUrl("https://www.nseindia.com/api/ipo-bid-details?symbol=DREAMFOLKS&series=EQ"); } } }
关键修改说明
- 添加真实User-Agent:模拟普通Chrome浏览器的请求标识,避免被反爬规则拦截
- 隐藏webdriver属性:通过CDP在页面加载前注入脚本,将
navigator.webdriver设为undefined,绕过自动化检测 - 先访问主页建立会话:NSE的API需要验证网站会话,先访问主页可获取有效Cookie,确保API请求被认可
- 完善自动化特征隐藏:同时排除
enable-automation开关并禁用自动化扩展,进一步减少暴露风险
内容的提问来源于stack exchange,提问作者Mr. K.D.
相关产品推荐
相关产品推荐

