使用Selenium Webdriver下载时命名文件

2lpgd968  于 2022-12-23  发布在  其他
关注(0)|答案(3)|浏览(398)

我看到您可以通过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个文件通过一个浏览器示例,并不希望有重新启动驱动程序为每次下载。

iih3973s

iih3973s1#

我会提出一个有点奇怪的办法:如果可能,不要使用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以获取更多信息。

xzv2uavs

xzv2uavs2#

我不知道是否有一个纯Selenium处理程序,但下面是我在需要对下载的文件做一些事情时所做的。
1.设置一个循环,轮询下载目录中具有.part扩展名的最新文件(这表示部分下载,如果不考虑的话,偶尔会出错。在这上面放一个计时器,以确保在超时/其他错误导致下载无法完成的情况下,您不会进入无限循环。我在Linux中使用ls -t <dirname>命令的输出(我的旧代码使用commands,它已被弃用,所以我在这里不显示它:),并使用以下命令获得第一个文件

# result = output of ls -t
result = result.split('\n')[1].split(' ')[-1]

1.如果while循环成功退出,则目录中最顶层的文件将是您的文件,然后您可以使用os.rename(或其他任何您喜欢的方法)修改该文件。
可能不是你想要的答案,但希望它能为你指明正确的方向。

x7rlezfr

x7rlezfr3#

代码如selected answer建议的解决方案。下载每个文件后重命名文件。

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")

此答案作为CC BY-SA 3.0下OP user1253952使用Selenium Webdriver下载时命名文件问题的edit发布。

相关问题