如何使用C#调用Google Chrome实现指定外部文件免点击自动下载
解决方案
方案1:优先使用.NET内置HttpClient直接下载(无浏览器依赖,无弹窗)
直接通过HTTP请求下载文件是最轻量化的实现,不需要依赖Chrome浏览器,也不会触发任何弹窗确认,推荐优先使用。
using System.Net.Http; using System.IO; // 全局声明HttpClient,不要每次请求都重新实例化,避免端口占用 private static readonly HttpClient _httpClient = new HttpClient(); async Task DownloadPdfAsync(string fileLink, string savePath) { // 添加浏览器UA标识,避免被站点反爬策略拦截 _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"); // 发起文件下载请求 var response = await _httpClient.GetAsync(fileLink); // 校验请求是否成功 response.EnsureSuccessStatusCode(); // 将文件写入本地路径 await using var fileStream = new FileStream(savePath, FileMode.Create, FileAccess.Write); await response.Content.CopyToAsync(fileStream); } // 调用示例 // await DownloadPdfAsync(file_link, @"C:\本地保存路径\AllGPs_GMSContract.pdf");
方案2:坚持使用Chrome启动的调整方案
如果你的场景需要复用Chrome的登录态、Cookie等浏览器缓存,可以调整Chrome启动参数,关闭内置PDF预览、禁用下载确认弹窗:
需要添加的核心参数说明:
--headless=new:启用新版无头模式,不会弹出可视化浏览器窗口--plugins.always_open_pdf_externally:禁用Chrome内置PDF预览插件,直接触发PDF文件下载--download.default_directory="本地目录路径":指定默认下载目录,跳过路径选择弹窗--disable-prompt-on-repost:禁用下载二次确认提示
修改后的代码如下:
string FILEURI = file_link; // 替换为你实际需要保存文件的本地目录 string saveDir = @"C:\Downloads"; System.Diagnostics.Process prozess = new System.Diagnostics.Process(); prozess.StartInfo.FileName = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"; prozess.StartInfo.Arguments = $"--headless=new --download --plugins.always_open_pdf_externally --download.default_directory=\"{saveDir}\" --disable-prompt-on-repost {FILEURI}"; prozess.Start();
注意事项
如果本地已经打开了Chrome窗口,新启动的Chrome进程会复用已有实例,导致自定义参数不生效,可以在启动参数中额外添加--user-data-dir="临时目录路径",启动独立的Chrome实例即可解决。
内容的提问来源于stack exchange,提问作者Eoin2211
相关产品推荐
相关产品推荐

