无法使用 ChromeDriver 下载文件

Unable to download file using ChromeDriver

我正在使用 chrome驱动程序和 selenium 从应用程序下载文件。但是在应用程序中单击下载按钮时,出现错误“Failed-Download error.

Chromedriver version : 2.21 Selenium version : 2.53.0

用于初始化 chrome 驱动程序和更改下载位置的代码:

            String newPath = "D:\Backup" + File.separator + "Database ";
            new File(newPath).mkdir();
            HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
            chromePrefs.put("profile.default_content_settings.popups", 0);
            chromePrefs.put("download.default_directory", newPath);
            chromePrefs.put("safebrowsing.enabled", "true");
            ChromeOptions options = new ChromeOptions();
            options.setExperimentalOption("prefs", chromePrefs);
            options.addArguments("--test-type");
            DesiredCapabilities cap = DesiredCapabilities.chrome();
            cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
            cap.setCapability("disable-popup-blocking", true);
            cap.setCapability(ChromeOptions.CAPABILITY, options);
            System.setProperty("webdriver.chrome.driver", CHROME_DRIVER_PATH);
            driver = new ChromeDriver(cap);
            // Maximize the driver window
            driver.manage().window().maximize();

错误是

有人可以帮我解决这个问题吗? 我可以手动从 Chrome 下载文件。

当提供的文件夹丢失或无法访问时,将显示 Failed - Download error。这可能是这种情况,因为我注意到最后有一个额外的 space,一旦创建文件夹,它可能会被删除。试试这个方法:

String newPath = Path.Combine("D:\Backup", "Database");
if (!Directory.Exists(newPath)){
    newPath = Directory.CreateDirectory(newPath).FullName;
}

在我的例子中,我有类似的东西,但错误在我使用的文件夹名称中。 我将路径描述为 C:/myFolder 而不是 C:\myFolder.

在之前版本的 ChromeDriver 中,第一种方法仍然有效。现在看起来这不再有效,出现一些下载错误。

我有一个类似的问题,我试图在下载前 运行 时间更改文件下载目录路径。下面的代码对我有用。

//Set Browser Capabilities.
String ProjectDirectory=RunConfiguration.getProjectDir()
String DownloadFolderPath1=ProjectDirectory+"/Downloads"
String DownloadFolderPath=DownloadFolderPath1.replace('/', '\')
String AppURL=GlobalVariable.MyAppURL
            
Map<String, Object> chromePrefs = new HashMap<String, Object>()
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", DownloadFolderPath)
chromePrefs.put("download.prompt_for_download", false)
chromePrefs.put("plugins.plugins_disabled", "Chrome PDF Viewer");
ChromeOptions options=new ChromeOptions();

//options.addArguments("--headless")
//options.addArguments("--window-size=1920,1080")
options.addArguments("--test-type")
//options.addArguments("--disable-gpu")
options.addArguments("--no-sandbox")
//options.addArguments("--disable-dev-shm-usage")
options.addArguments("--disable-software-rasterizer")
options.addArguments("--disable-popup-blocking")
options.addArguments("--disable-extensions")
options.setExperimentalOption("prefs", chromePrefs)

DesiredCapabilities cap = DesiredCapabilities.chrome()
cap.setCapability(ChromeOptions.CAPABILITY, options)
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true)
System.setProperty("webdriver.chrome.driver", DriverFactory.getChromeDriverPath())
WebDriver driver = new ChromeDriver(cap);       
driver.get(AppURL)
driver.manage().window().maximize()

我花了一些时间才找出我的错误,但修复起来非常简单。 就我而言,我不应该为下载文件夹使用 相对文件路径 名称,而是必须使用 绝对文件路径 名称。

如果您在 Linux 并且“download.default_directory”仍然保留您的个人目录值,请查看 env XDG_DOWNLOAD_DIR 文件 ~/.config/user-dirs.dirs

您可以从该文件中删除变量,或者,您可以在 运行 您的程序之前将其设置为您喜欢的任何值。

我的软件集:

  • Ubuntu 仿生,18.04.5 LTS
  • chromedriver.86.0.4240.22.lin64
  • Python 3.9
  • 硒 3.141.0
  • 碎片 0.14.0