使用python定义chromedriver selenium的下载目录

时间:2013-05-02 01:03:58

标签: python selenium selenium-chromedriver

一切都在标题中!

有没有办法为python使用的selenium-chromedriver定义下载目录?

尽管进行了很多研究,但我还没有找到确凿的结论...... 作为一个新手,我已经看到许多关于Chromedriver的“desired_capabilities”或“选项”的事情,但没有解决我的问题...(我仍然不知道它是否会!)

要解释一下我的问题: 我有很多网址要扫描(200 000),每个网址都要下载一个文件。 我必须创建一个包含url的表,我在其上报废的信息,以及我刚为每个网页下载的文件的名称。 有了我必须处理的卷,我创建了打开多个chromedriver实例的线程来加速处理。 问题是每个下载的文件都到达同一个默认目录,我不能再将文件链接到网址了... 因此,我们的想法是为每个线程创建一个下载目录,逐个管理它们。

如果有人在标题中找到了我的问题的答案,或者确定了下载文件的解决方法并将其与当前网址相关联,我将不胜感激!

3 个答案:

答案 0 :(得分:1)

对于chromedriver1,创建一个新的配置文件,并在该配置文件中将download.default_directory设置为所需的位置,并使用chrome.profile为此配置文件设置chrome。 selenium-chromedriver包应该有一些创建新配置文件的方法(至少它与ruby一样),因为它们需要一些特殊处理。

Chromedriver2不支持设置个人资料。您可以使用它设置首选项。如果要设置下载目录,请执行以下操作:

prefs: { download: { default_directory: "/tmp" } }

ruby​​ selenium-webdriver还不支持这个功能,但python变种可能会这样做。

答案 1 :(得分:1)

我最近遇到了同样的问题。尝试了很多在互联网上找到的解决方案,没人帮忙。所以最后我来到这里:

  • 使用空的user-data-dir(在/ tmp文件夹中)启动chrome以让chrome初始化它
  • 退出Chrome
  • 在新创建的user-data-dir中修改默认/首选项,将这些字段添加到根对象(仅作为示例):

    “下载”:{       “default_directory”:“/ tmp / tmpX7EADC.downloads”,       “directory_upgrade”:true    }

  • 使用相同的user-data-dir

  • 再次启动chrome

现在它运作得很好。

另一个提示:如果您不知道要下载的文件的文件名,请创建下载目录的快照(文件列表),然后下载该文件并通过comparin snapshot和当前文件列表查找其名称在下载目录中。

答案 2 :(得分:0)

请尝试以下代码......

System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>();
options.setExperimentalOptions("prefs", chromePrefs);
options.addArguments("--test-type");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);