【问题标题】:Trouble renaming downloaded file from a folder无法从文件夹重命名下载的文件
【发布时间】:2019-06-28 00:14:21
【问题描述】:

我在 python 中结合 selenium 编写了一个脚本,通过单击该文件的链接从网页下载文件。当我运行我的脚本时,该文件似乎已下载到预定义的文件夹中。

问题是我找不到重命名下载文件的任何想法。 FYC 该文件夹中可能有多个文件。我想将下载的文件重命名为脚本中的变量newname

如何重命名文件夹中下载的文件?

这是我到目前为止写的:

import os
from selenium import webdriver

url = "https://www.online-convert.com/file-format/docx"

folder_location = r"C:\Users\WCS\Desktop\file_storage"

newname = "document.docx"

def download_n_rename_file(link):
    driver.get(link)
    driver.find_element_by_css_selector("a[href$='example_multipage.docx']").click()
    #how to rename the downloaded file to "document.docx"
    #os.rename()

if __name__ == '__main__':
    chromeOptions = webdriver.ChromeOptions()
    prefs = {'download.default_directory': folder_location}
    chromeOptions.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(chrome_options=chromeOptions)
    download_n_rename_file(url)

【问题讨论】:

  • os.rename('existing_name.txt',newname)
  • 感谢您的建议@user5173426。我实际上知道如何使用os.rename(),但问题是事先没有这样的现有名称。一旦文件在文件夹中可用,我需要重命名该文件。无论如何我可以提前确定文件下载后将获得哪个名称?
  • 恐怕这是不可能的,除非你四处寻找可能循环下载的文件夹以检查扩展名为.crdownload的文件是否已完成并且它不再具有此扩展名。然后,您可以获取它的名称并将其传递给 os.rename() 方法。 PS。 .crdownload 方式适用于 Chrome。

标签: python python-3.x selenium selenium-webdriver web-scraping


【解决方案1】:

我假设您下载的文件名为example_multipage.docx

import os
from selenium import webdriver

url = "https://www.online-convert.com/file-format/docx"

folder_location = r"C:\Users\WCS\Desktop\file_storage"

newname = "document.docx"

def download_n_rename_file(link):
    driver.get(link)
    driver.find_element_by_css_selector("a[href$='example_multipage.docx']").click()

    # To rename the downloaded file to "document.docx"
    os.rename('example_multipage.docx',newname)

if __name__ == '__main__':
    chromeOptions = webdriver.ChromeOptions()
    prefs = {'download.default_directory': folder_location}
    chromeOptions.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(chrome_options=chromeOptions)
    download_n_rename_file(url)

编辑:

OP:但问题是事先没有这样的现有名称。

这让我想,如果我们能找到一个文件下载成功的时间然后获取它的名字呢? But, wait. that is not possible!

或者有没有办法检测下载文件的名称? But, wait. You don't have control over the download file naming through selenium.

【讨论】:

  • 下载完成可能需要一些时间,而rename()会在点击后立即运行。
  • @TodorMinakov 我猜到了,我们可能会在两者之间添加一个计时器,但如果以前不知道名称,情况就不是这样了。不管怎样,我认为这是不可能的。
  • 您正在用 current 名称“X”重命名文件(如果您不知道文件的当前名称,就无法重命名文件,对吧?;)。由于您已经做出了一个假设,那就继续吧 - 等到文件 X 实际出现在 FS 上,这将告诉您下载已完成。
猜你喜欢
  • 2012-01-09
  • 1970-01-01
  • 2013-06-20
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
相关资源
最近更新 更多