【问题标题】:close firefox automatically when download is complete下载完成后自动关闭firefox
【发布时间】:2012-05-29 16:43:42
【问题描述】:

我正在使用 selenium webdriver 使用 Firefox 进行一些下载。目前,我的脚本在下载启动后等待特定时间,然后关闭 Firefox。我想知道是否有办法将firefox配置为在下载完成时自动关闭?或者使用 selenium webdriver,我可以检查下载是否已完成?我不想使用任何附加组件,因为它可能会在我的脚本中添加依赖项。我不能使用 wget/curl 等来下载文件。 提前致谢

【问题讨论】:

    标签: firefox selenium download webdriver


    【解决方案1】:

    伊格纳西奥·孔特雷拉斯说过的话。轮询下载路径可能是最好(最强大)的解决方案。

    备选方案#1:

    使用 FirefoxProfileDownload Statusbar 插件。它有一个方便的选项“关闭窗口后在下载管理器中继续下载”(或类似的东西),这样它就会让 Firefox 在后台运行,直到下载完成。

    备选方案#2:

    如果可以的话,直接使用this(或任何其他类似的WebDriver 友好工具)或this 下载文件。这将完全将 Firefox 排除在进程之外。

    【讨论】:

    【解决方案2】:

    您可以使用 Selenium WebDriver API 的 WebDriverWait 类使用以下代码进行轮询:

           (new WebDriverWait(driver, 180, 10)).until(new ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver d) {
                    return !downloadedFilePart.exists();
                }
             });
    

    上面的代码检查带有 .part 扩展名的文件程序每 10 秒下载一次,直到下载完成或 3 分钟后超时。

    【讨论】:

      【解决方案3】:

      我不确定这是否可行,但您是否考虑过通过 Firefox 探索下载位置?轮询它,直到您看到下载已完成。

      如果我没记错的话,当文件被下载时,应该有一个扩展名为 .part 的额外文件。

      类似这样的东西(伪代码):

      ...
      
      WebDriver poller = new FirefoxDriver()
      poller.get("path to download folder");
      
      while ("file with .part extension is present") {
          // Wait/sleep some time
          // Refresh poller
      }
      
      // close downloading firefox instance
      firefox.quit();
      // close the polling instance
      poller.quit();
      

      希望对你有帮助

      【讨论】:

      • 谢谢伊格纳西奥。但问题是,在给定时间,可以运行多个 Firefox 实例。多个 firefox 实例可以下载到同一个位置。
      • 好吧,您可以让这些实例中的每一个轮询下载位置,以查找它们各自下载的 .part 文件(如果这些实例是从 Java 运行代码的分离实例中抛出的)。或者如果它们都是从同一个程序中执行的,你可以创建一个文件名数组,这样你就可以抛出一个独特的轮询驱动程序,在需要时关闭每个 firefox 实例。
      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 2015-03-26
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 2010-12-17
      相关资源
      最近更新 更多