重命名下载的文件selenium

gblwokeq  于 2022-12-26  发布在  其他
关注(0)|答案(2)|浏览(417)

我正在使用Selenium从该页面自动下载csv格式的文件:
https://catalog.data.gov/dataset?tags=crime
这是我正在使用的代码:

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("browser.download.dir", '/home/luis/Desktop/data/')
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/csv")

driver = webdriver.Firefox(firefox_profile=profile)
driver.get(url)
time.sleep(2)
download_button = driver.find_element_by_xpath('//*[@id="content"]/div[2]/div[2]/section[1]/div[2]/ul/li[14]/div/ul/li[1]/a')
download_button.click()

此处设置下载文件夹:

profile.set_preference("browser.download.dir", '/home/luis/Desktop/data/')

如何选择保存文件时使用的名称?可以在下载时定义名称吗?
我的意思是这样的:

For name in names:
    download_button = driver.find_element_by_xpath('//*[@id="content"]/div[2]/div[2]/section[1]/div[2]/ul/li[14]/div/ul/li[{}]/a'.format(name))
    download_button.click()
    save_file_as(name)
nhhxz33t

nhhxz33t1#

  • 您无法通过Selenium控制下载文件的命名 *。

你可以使用一个目录观察器来检测文件的下载时间,然后相应地重命名它。请参阅this answer包含更多的后续细节。

pengsaosao

pengsaosao2#

import os,glob

def get_last_filename_and_rename(save_folder, new_filename):
    files = glob.glob(save_folder + '/*')
    max_file = max(files, key=os.path.getctime)
    filename = max_file.split("/")[-1].split(".")[0]
    new_path = max_file.replace(filename, new_filename)
    os.rename(max_file, new_path)
    return new_path

只是一个代码示例。找到并重命名最后下载的文件。* new_filename不包括扩展名,它是从原始文件继承的。

相关问题