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

如何通过Selenium ChromeDriver修改Chrome自动下载前的文件名?

Hey there! Let's figure out how to rename that file before Chrome starts downloading it when using Selenium. I've got two reliable approaches for you:

Approach 1: Pre-set Download Directory + Rename After Download

This is the simpler method, perfect for most common scenarios. We'll tell Chrome where to save the file, wait for the download to finish, then rename it to what you want.

Step-by-Step Implementation:

  • Configure ChromeOptions to specify your download folder and disable the download prompt.
  • Run your existing click logic to trigger the download.
  • Wait for the file to finish downloading (we'll exclude Chrome's temporary .crdownload files).
  • Rename the downloaded file to your desired name.

Here's the code example in C#:

// Set up Chrome download preferences
var options = new ChromeOptions();
var downloadFolder = @"C:\Your\Target\Download\Folder";

options.AddUserProfilePreference("download.default_directory", downloadFolder);
options.AddUserProfilePreference("download.prompt_for_download", false);
options.AddUserProfilePreference("download.directory_upgrade", true);
options.AddUserProfilePreference("safebrowsing.enabled", true);

// Initialize the Chrome driver with these options
var driver = new ChromeDriver(options);

// Your existing code to trigger the download
IWebElement button = driver.FindElement(By.Id("ImagshowMR"));
Actions action = new Actions(driver);
action.MoveToElement(button).Perform();
button.Click();

// Wait for the file to finish downloading (adjust the file extension as needed)
string downloadedFile = WaitForDownloadCompletion(downloadFolder, ".pdf");
string desiredFileName = "MyCustomFileName.pdf";
string newFilePath = Path.Combine(downloadFolder, desiredFileName);

// Rename the file if it exists
if (File.Exists(downloadedFile))
{
    File.Move(downloadedFile, newFilePath);
}

// Helper method to wait for download completion
private string WaitForDownloadCompletion(string directory, string fileExtension)
{
    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
    return wait.Until(driver => 
    {
        var completedFiles = Directory.GetFiles(directory, $"*{fileExtension}")
                                      .Where(file => !file.EndsWith(".crdownload"))
                                      .ToList();
        return completedFiles.Count > 0 ? completedFiles[0] : null;
    });
}
Approach 2: Use Chrome DevTools Protocol (CDP) to Rename Before Download

If you want to rename the file before Chrome even starts saving it, you can use the Chrome DevTools Protocol to intercept the download request and set your custom filename directly.

Step-by-Step Implementation:

  • Enable the Downloads and Network domains via CDP.
  • Listen for the DownloadWillBegin event, which fires right before the download starts.
  • In the event handler, set the custom download path with your desired filename.

Here's the code example:

var driver = new ChromeDriver();

// Create a DevTools session
var devToolsSession = driver.CreateDevToolsSession();

// Enable necessary CDP domains
devToolsSession.Domains.Network.Enable(new Network.EnableCommandSettings());
devToolsSession.Domains.Downloads.Enable(new Downloads.EnableCommandSettings());

// Intercept the download start event to rename the file
devToolsSession.Domains.Downloads.DownloadWillBegin += (sender, args) =>
{
    string customFileName = "MyPreRenamedFile.ext";
    string targetPath = Path.Combine(@"C:\Your\Download\Folder", customFileName);

    // Set the custom download path and filename
    devToolsSession.Domains.Downloads.SetDownloadPath(new Downloads.SetDownloadPathCommandSettings
    {
        Path = targetPath,
        DownloadId = args.DownloadId
    });
};

// Your existing click logic
IWebElement button = driver.FindElement(By.Id("ImagshowMR"));
Actions action = new Actions(driver);
action.MoveToElement(button).Perform();
button.Click();

Quick Comparison of the Two Approaches:

  • Approach 1: Easy to set up, no need to learn CDP, works with most Selenium versions. The only downside is you have to wait for the download to finish before renaming.
  • Approach 2: Lets you rename the file before the download starts, which is cleaner for some workflows. But it requires familiarity with CDP, and the API might vary slightly between Selenium versions.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:48:46