我看到您可以通过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个文件通过一个浏览器示例,并不希望有重新启动驱动程序为每次下载。
3条答案
按热度按时间iih3973s1#
我会提出一个有点奇怪的办法:如果可能,不要使用Selenium下载文件。
我的意思是获取文件URL并使用
urllib
库下载文件并以“手动”方式将其保存到磁盘。问题是Selenium没有处理Windows对话框的工具,例如“另存为”对话框。我不确定,但我怀疑它是否可以处理任何操作系统对话框,请纠正我的错误。:)这里有一个小小的例子:
我们在这里的唯一工作是确保我们处理所有的urllib异常。请访问http://docs.python.org/2/library/urllib.html#urllib.urlretrieve以获取更多信息。
xzv2uavs2#
我不知道是否有一个纯Selenium处理程序,但下面是我在需要对下载的文件做一些事情时所做的。
1.设置一个循环,轮询下载目录中不具有
.part
扩展名的最新文件(这表示部分下载,如果不考虑的话,偶尔会出错。在这上面放一个计时器,以确保在超时/其他错误导致下载无法完成的情况下,您不会进入无限循环。我在Linux中使用ls -t <dirname>
命令的输出(我的旧代码使用commands
,它已被弃用,所以我在这里不显示它:),并使用以下命令获得第一个文件1.如果
while
循环成功退出,则目录中最顶层的文件将是您的文件,然后您可以使用os.rename
(或其他任何您喜欢的方法)修改该文件。可能不是你想要的答案,但希望它能为你指明正确的方向。
x7rlezfr3#
代码如selected answer建议的解决方案。下载每个文件后重命名文件。
此答案作为CC BY-SA 3.0下OP user1253952使用Selenium Webdriver下载时命名文件问题的edit发布。