小编典典

使用Selenium Webdriver下载时命名文件

selenium

我看到您可以设置通过Webdriver将文件下载到的位置,如下所示:

fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir",getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")

browser = webdriver.Firefox(firefox_profile=fp)

但是,我想知道下载文件时是否有类似的方式为文件命名?最好不要与配置文件相关联,因为我将通过一个浏览器实例下载约6000个文件,并且不想为每次下载都重新启动驱动程序。


编辑:选择的答案所建议的代码解决方案。下载完每个文件后,重命名该文件。

import os
os.chdir(SAVE_TO_DIRECTORY)
files = filter(os.path.isfile, os.listdir(SAVE_TO_DIRECTORY))
files = [os.path.join(SAVE_TO_DIRECTORY, f) for f in files] # add path to each file
files.sort(key=lambda x: os.path.getmtime(x))
newest_file = files[-1]
os.rename(newest_file, docName+".pdf")

阅读 3250

收藏
2020-06-26

共1个答案

小编典典

我不知道是否有一个纯Selenium处理程序,但是当我需要对下载的文件做一些事情时,这就是我所做的事情。

  1. 设置一个循环,轮询,它最新的文件下载目录中 具有.part扩展名(这表明部分下载和偶尔会绊倒的事情了,如果不占。把一个计时器上是为了确保你不要去成在超时的情况下发生无限循环/其他错误导致下载无法完成。我ls -t <dirname>在Linux中使用了命令的输出(我的旧代码使用commands,因此已弃用,因此在这里不显示它了:))并得到了通过使用第一个文件

    # result = output of ls -t
    

    result = result.split(‘\n’)[1].split(‘ ‘)[-1]

  2. 如果while循环成功退出,则目录中最顶层的文件将是您的文件,您可以使用os.rename(或您喜欢的其他任何文件)对其进行修改。

可能不是您正在寻找的答案,但希望它能为您指明正确的方向。

2020-06-26