我正在使用Selenium webdriver(在Python中)自动化数千个文件的下载。我希望将文件保存在不同的文件夹中。以下代码有效,但它需要多次退出并重新启动webdriver,这会减慢进程:
some_list = ["item1", "item2", "item3"] # over 300 items on the actual code
for item in some_list:
download_folder = "/Users/myusername/Desktop/" + item
os.makedirs(download_folder)
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.manager.showWhenStarting", False)
fp.set_preference("browser.download.dir", download_folder)
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain")
browser = webdriver.Firefox(firefox_profile = fp)
# a bunch of code that accesses the site and downloads the files
browser.close()
browser.quit()
因此,在每次迭代时我都必须退出webdriver并重新启动它,这非常有效。有一个更好的方法吗?显然我们无法在实例化webdriver之后更改Firefox配置文件(请参阅this和this以前的问题),但也许有一些替代方案我不知道?
(Mac OS X 10.6.8,Python 2.7.5,Selenium 2.2.0)
答案 0 :(得分:1)
不,我认为你不能这样做。
选项一:为一个FirefoxProfile指定不同的默认目录
你做不到。在我看来,这是Firefox的问题,而不是Selenium。但是,这个Firefox限制看起来对我来说是正确的设计。 browser.download.dir
是默认下载目标,如果它允许多个目录,则不再是“default”。
选项二:为一个驱动程序实例切换多个FirefoxProfile
如果不在Firefox中执行此操作,可以将FirefoxProfile切换为相同的驱动程序实例吗?据我所知,答案是否定的。 (你已经对此做了一些研究)
选项三:使用普通的非Selenium方式进行下载
如果你想避免使用这种自动下载方法并以正常方式(如自动等),那么它属于"How To Download Files With Selenium And Why You Shouldn’t"类别。但在这种情况下,您的代码可以简化。
some_list = ["item1", "item2", "item3"] # over 300 items on the actual code
for item in some_list:
download_folder = "/Users/myusername/Desktop/" + item
some_way_magically_do_the_downloading(download_folder)