硒在下载时提供文件名
我正在使用一个硒脚本,我试图下载一个Excel文件并给它一个特定的名称。 这是我的代码:
无论如何,我可以给文件下载一个特定的名称?
码:
#!/usr/bin/python
from selenium import webdriver
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
profile = FirefoxProfile()
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream")
profile.set_preference("browser.download.dir", "C:Downloads" )
browser = webdriver.Firefox(firefox_profile=profile)
browser.get('https://test.com/')
browser.find_element_by_partial_link_text("Excel").click() # Download file
您不能通过硒指定下载文件的名称。 但是,您可以下载该文件,在下载的文件夹中找到最新文件,然后根据需要重命名。
注意:来自谷歌搜索的借用方法可能有错误。 但你明白了。
import os
import shutil
filename = max([f for f in os.listdir('c:downloads')], key=os.path.getctime)
shutil.move(os.path.join(dirpath,filename),newfilename)
有什么我会纠正@parishodak回答:
这里的文件名只会返回相对路径(这里是文件名)而不是绝对路径。
这就是为什么在@FreshRamen之后出现以下错误:
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/genericpath.py",
line 72, in getctime return os.stat(filename).st_ctime OSError:
[Errno 2] No such file or directory: '.localized'
有正确的代码:
import os
import shutil
filepath = 'c:downloads'
filename = max([filepath +""+ f for f in os.listdir(filepath)], key=os.path.getctime)
shutil.move(os.path.join(dirpath,filename),newfilename)
希望这段代码不会让人困惑。 我花了一段时间来创建它,并且非常有用,因为对于这个问题没有一个明确的答案,只有这个库。
import os
import time
def tiny_file_rename(newname, folder_of download):
filename = max([f for f in os.listdir(folder_of download)], key=lambda xa : os.path.getctime(os.path.join(folder_of_download,xa)))
if '.part' in filename:
time.sleep(1)
os.rename(os.path.join(folder_of download, filename), os.path.join(folder_of download, newname))
else:
os.rename(os.path.join(folder_of download, filename),os.path.join(folder_of download,newname))
希望这可以挽救某人的欢乐时光。
编辑:感谢@Om Prakash编辑我的代码,这让我记得我没有解释代码。
使用max([])
函数可能会导致竞争条件,从而导致空白或损坏的文件(我从经验中知道)。 你想检查文件是否完全下载。 这是因为硒不会等待文件下载完成,因此当您检查上次创建的文件时,不完整的文件将显示在您生成的列表中,并且它将尝试移动该文件。 即使这样,你最好还是等一会儿,让文件免于使用Firefox。