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

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

解决Selenium点击下载后修改默认文件名的问题

问题说明

需要通过Python Selenium点击下载按钮后,修改系统保存对话框中的默认文件名并保存,但原代码中切换窗口修改文件名的逻辑无效——系统弹窗不属于浏览器窗口,Selenium无法直接操作这类系统级控件。

原尝试代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

options = webdriver.ChromeOptions()
prefs = {"download.prompt_for_download":True,
         "download.default_directory":
                    r"C:\Music\\",#IMPORTANT - ENDING SLASH V IMPORTANT
         "directory_upgrade": True}
options.add_experimental_option("prefs", prefs)
driver =webdriver.Chrome(executable_path=r".\bot_automation\drivers\chromedriver.exe",chrome_options=options)


driver.get('https://www.browserstack.com/test-on-the-right-mobile-devices')
gotit = driver.find_element(By.ID,'accept-cookie-notification')
gotit.click()
downloadcsv = driver.find_element(By.CSS_SELECTOR,'.icon-csv')
downloadcsv.click()

# 以下代码无效,需要替换
file_window=driver.switch_to.window(driver.window_handles[1])
file_window.clear()
file_window.send_keys("Hii text")
# 还需要按回车保存

time.sleep(5)
driver.close()

解决方案

方案一:用pyautogui模拟系统弹窗操作

借助第三方库模拟键盘输入,绕过Selenium无法控制系统对话框的限制:

  1. 先安装依赖:
pip install pyautogui
  1. 修改后的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import pyautogui

options = webdriver.ChromeOptions()
prefs = {
    "download.prompt_for_download": True,
    "download.default_directory": r"C:\Music\\",
    "directory_upgrade": True
}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(executable_path=r".\bot_automation\drivers\chromedriver.exe", options=options)

driver.get('https://www.browserstack.com/test-on-the-right-mobile-devices')
gotit = driver.find_element(By.ID, 'accept-cookie-notification')
gotit.click()
downloadcsv = driver.find_element(By.CSS_SELECTOR, '.icon-csv')
downloadcsv.click()

# 等待弹窗加载(时间根据实际情况调整)
time.sleep(2)
# 全选默认文件名(Ctrl+A)
pyautogui.hotkey('ctrl', 'a')
# 输入新文件名
pyautogui.typewrite("Hii text")
# 按回车保存
pyautogui.press('enter')

time.sleep(5)
driver.quit()

注意:运行时不要切换窗口,确保浏览器弹窗处于焦点,否则输入会失效。

方案二:自动下载后重命名(更稳定推荐)

关闭下载提示,让文件自动下载到指定目录,之后再重命名,完全规避系统弹窗操作:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import os
from glob import glob

options = webdriver.ChromeOptions()
prefs = {
    "download.prompt_for_download": False,  # 关闭下载弹窗提示
    "download.default_directory": r"C:\Music\\",
    "directory_upgrade": True,
    "profile.default_content_settings.popups": 0
}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(executable_path=r".\bot_automation\drivers\chromedriver.exe", options=options)

driver.get('https://www.browserstack.com/test-on-the-right-mobile-devices')
gotit = driver.find_element(By.ID, 'accept-cookie-notification')
gotit.click()
downloadcsv = driver.find_element(By.CSS_SELECTOR, '.icon-csv')
downloadcsv.click()

# 等待下载完成(可根据文件大小调整等待时间,或用更精准的文件检查逻辑)
time.sleep(5)

# 获取下载目录下最新的csv文件
download_dir = r"C:\Music"
list_of_files = glob(os.path.join(download_dir, "*.csv"))
latest_file = max(list_of_files, key=os.path.getctime)

# 重命名文件
new_file_name = os.path.join(download_dir, "Hii text.csv")
os.rename(latest_file, new_file_name)

driver.quit()

此方法不受系统环境限制,稳定性更高,适合大多数自动化场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:53:10