【问题标题】:Define download directory for chromedriver selenium with python用python定义chromedriver selenium的下载目录
【发布时间】:2013-05-02 01:03:57
【问题描述】:

一切都在标题中!

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

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

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

如果有人在标题中回答了我的问题,或者有一种解决方法来识别下载的文件并将其与当前 url 链接,我将不胜感激!

【问题讨论】:

  • 一般情况下,我建议您不要使用 chrome 下载东西,这通常是一个经过深思熟虑的测试,只是将所有内容下载到静态文件夹中。你对下载的文件做任何事情吗?阅读以下内容:ardesco.lazerycode.com/index.php/2012/07/… 然后是 blog.pythonlibrary.org/2012/06/07/…
  • 您好,感谢您的回复。我实际上不使用 Selenium 来运行测试,而是真正自动下载大量数据 csv 文件以进行后期处理。我曾尝试探索 urllib2 方式,但在网站上进行身份验证时遇到了困难......(可能是因为我是周日 DIY 新手,而当我找到 Selenium 时,它一直是金蛋鹅!.. .)

标签: python selenium selenium-chromedriver


【解决方案1】:

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

Chromedriver2 不支持设置配置文件。您可以使用它设置首选项。如果你想设置下载目录,你可以这样做:

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

ruby selenium-webdriver 尚不支持此功能,但 python 变体可能支持。

【讨论】:

    【解决方案2】:

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

    • 使用空的 user-data-dir(在 /tmp 文件夹中)启动 chrome 以让 chrome 对其进行初始化
    • 退出铬
    • 在新创建的用户数据目录中修改默认/首选项,将这些字段添加到根对象(只是一个示例):

      “下载”:{ "default_directory": "/tmp/tmpX7EADC.downloads", “目录升级”:真 }

    • 使用相同的用户数据目录再次启动 chrome

    现在它工作得很好。

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

    【讨论】:

    • 如果您需要某种 Python 伪代码来解决问题,请告诉我。
    【解决方案3】:

    请尝试以下代码....

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

    【讨论】:

    • C# 回答Python 问题?
    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 2018-02-09
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2022-06-12
    相关资源
    最近更新 更多