通过Selenium在Microsoft Edge中下载文件

5

我需要使用Selenium WebDriver和跨浏览器来自动化下载文件的情况。

我已经针对Chrome(通过ChromeOptions)、FF(通过FirefoxProfile)和IE11完成了此操作。例如,对于Firefox,我使用Firefox Profile来禁止下载提示,代码如下:

profile.setPreference("browser.download.dir", "C:\\DownloadCleanup");
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.manager.showWhenStarting", false);      
profile.setPreference("browser.helperApps.alwaysAsk.force", false);   
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", mimeTypes);

对于IE11,我使用Robot类按下组合键Alt + S,就像这样:

Robot robot = new Robot();            
// simulate the "Alt + S" to save file on IE11 when Download Prompt appears
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_ALT);
robot.keyRelease(KeyEvent.VK_S);

目前一切工作正常。现在我想在Edge浏览器中实现这个功能。但是我找不到与IE11相似的组合键,也没有类似Chrome和FF的设置。

我尝试在Edge中手动操作,但当出现“下载提示”时,似乎不存在保存文件的快捷键。所以,我的解决方法是进入Edge->设置->高级设置,并关闭此“下载提示”。

是否有人知道如何通过Selenium在Edge中实现类似Chrome、FF的操作呢?


正确的测试自动化模式是使用浏览器“配置文件”,它可以是预先保存的指向您选择的空白下载文件夹的配置文件。这样很容易测试文件是否已下载,但是Selenium允许您在运行时控制配置文件,因为保存的配置文件会随着浏览器更新而变得过时和失效。尝试使用https://github.com/microsoft/edge-selenium-tools获取线索。 - user337598
3个回答

0

最近我遇到了一个问题,我想下载Excel文件,但它却在Edge的Microsoft查看器中打开。
现在,默认设置询问我如何处理每个下载被设置为False。
然而,如果你想自动化与特定设置的交互,可以按照以下步骤进行。

Edge: 101.0.1210.39 (X64)

# ...

# Initialize driver
WebDriver driver= new EdgeDriver();
JavascriptExecutor js = (JavascriptExecutor) driver;

# get settings
driver.navigate().to("edge://settings/downloads");

# get the required settings
js.executeScript('''
var toggle = document.querySelector('input[aria-label="Ask me what to do with each download"]');
toggle.click();
''')

# continue ...

这段代码是从这个问题转换而来的:selenium-python-edge-disable-open-office-files-in-browser-setting


-1

不要这样做,你在浪费时间。

浏览器制造商已经测试过浏览器下载机制是否正常工作,如果最坏的情况发生并且它出现了问题,你也无法强制用户更改浏览器版本。

如果您真的想在服务器端检查文件是否存在,则可以使用标准的http库(如OkHttp)来执行此操作。 您无需实际下载文件即可检查其是否存在,并且除非您要积极检查文件内容(在这种情况下,我建议使用SHA1或MD5哈希来检查文件匹配性),否则应避免下载文件。

我之前在我的博客上写过关于此的文章,尽管该信息现在有些过时。


-1
如果您想在EDGE上下载文件而不出现下载提示,您需要将EDGE的注册表键“EnableSavePrompt”更改为00000000。我在C#上使用以下代码:
        RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge", true);
        if (key.OpenSubKey("Download") == null)
        {
            key.CreateSubKey("Download");
        }
        key = key.OpenSubKey(@"Download", true);
        key.SetValue("EnableSavePrompt", 00000000); 
        key.Close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接