c# - 使用 selenium 下载没有直接 URL 的文件

标签 c# vb.net selenium selenium-chromedriver webautomation

我正在使用 vb.net 在 Chrome 中使用 Selenium 进行网站自动化,我想从没有下载按钮直接 URL 的网站下载文件(从 JavaScript 触发下载)如何在 selenium 中执行此操作.net(C# 或 vb.net)?

如果不可能,我希望在用户单击下载按钮时收到通知并控制设置下载路径和下载完成事件等内容。

如果无法设置下载路径,那么至少我想在下载完成后获取下载路径。 如何实现我的要求?

请帮助我。

最佳答案

下载可能是一项繁琐的任务,具体取决于您使用的浏览器。幸运的是,您使用的是 Chrome,这应该不会太麻烦。

首先,您需要找到开始文件下载的按钮。

driver.FindElement(<locator here>).click()

现在下载应该已经开始了。但是,下载可能需要一段时间才能完成。因此,您必须轮询下载文件夹中是否有新文件(如果您知道文件名,则轮询特定文件)。您可以在创建驱动程序时指定下载文件夹。

var options = new ChromeOptionsWithPrefs();
        options.prefs = new Dictionary<string, object>
        {
            { "download.default_directory", "path/to/downloads/folder" }
        };
        RemoteWebDriver driver = new ChromeDriver("path/to/driver", options);

现在您可以通过执行以下操作找到此文件夹中的最新文件

var directory = new DirectoryInfo("path/to/downloads/folder");
var myFile = directory.GetFiles()
             .OrderByDescending(f => f.LastWriteTime)
             .First();

在循环中,您可以将此文件名与刚刚下载的文件的文件名进行比较。在此循环中添加超时,如果未在预期时间内下载,您的测试可能会失败。

注意:我不熟悉这种语言,因此某些代码可能无法完全运行,但它会给您带来想法

关于c# - 使用 selenium 下载没有直接 URL 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37585382/

相关文章:

c# - 从 C# 项目导航到 VB.NET 项目中的类或方法时,有没有办法阻止显示 C# 元数据

c# - 由带有索引的二维数组构建的具有 x 列的数据表?

python - 将 selenium python 保存到 s3

c# - 如何从 Windows Phone 8.1 中的设备日历中删除约会

c# 需要几个小时的时间来执行

c# - Html 文本框数组

c# - UWP 的 WebRTC,新的 RTCPeerConnection() 没有完成执行

asp.net - 什么时候应该使用工厂模式?

python - 如何使用 Selenium Python 从 XML URL 中按 tagName 提取元素

selenium - 如何移动到浏览器窗口中不可见的geb页面内容?