12

我看到你可以通过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")
4

2 回答 2

4

我会建议一种有点奇怪的方法:如果可能,不要使用 Selenium 下载文件。

我的意思是获取文件 URL 并使用urllib库下载文件并以“手动”方式将其保存到磁盘。问题是 selenium 没有处理 Windows 对话框的工具,例如“另存为”对话框。我不确定,但我怀疑它根本不能处理任何操作系统对话框,请纠正我我错了。:)

这是一个小例子:

import urllib
urllib.urlretrieve( "http://www.yourhost.com/yourfile.ext", "your-file-name.ext")

我们这里唯一的工作是确保我们处理所有 urllib 异常。请参阅http://docs.python.org/2/library/urllib.html#urllib.urlretrieve了解更多信息。

于 2012-11-10T08:33:20.830 回答
3

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

  1. 设置一个循环,轮询您的下载目录以查找没有扩展名的最新文件.part(这表示部分下载,如果不考虑,偶尔会出错。在此设置一个计时器以确保您不会进入在超时/其他错误导致下载无法完成的情况下无限循环。我ls -t <dirname>在 Linux 中使用了命令的输出(我的旧代码使用commands,已弃用,所以我不会在这里展示它:))并得到了第一个文件使用

    # result = output of ls -t
    result = result.split('\n')[1].split(' ')[-1]
    
  2. 如果while循环成功退出,目录中最顶层的文件将是您的文件,然后您可以使用os.rename(或您喜欢的任何其他内容)对其进行修改。

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

于 2012-11-09T23:38:18.630 回答