首页 > 解决方案 > 使用 VBA 处理 chromium 浏览器的文件下载弹出窗口

问题描述

我将 Selenium 与 VBA 和 Microsoft Edge 一起使用来收集信息,并从网页下载一些文件。除了下载部分,一切都很好。

在这个示例网站上:https://file-examples.com/index.php/sample-documents-download/sample-doc-download/,代码如

oWebDriver.FindElementByXPath("//a[@href=""https://file-examples-com.github.io/uploads/2017/02/file-sample_100kB.doc""]").Click

将导致这样的弹出窗口:

在此处输入图像描述

不幸的是,就我而言,不可能简单地更改浏览器的首选项,因为宏将在授权有限的机器上运行,并且无法更改以下设置:

在此处输入图像描述

最后一个选项可以翻译为:“每次下载时询问存储位置”并被锁定。

似乎无法访问第一个屏幕截图中的“另存为”弹出窗口,无论是使用 Selenium 还是使用 SendKeys。

因此,唯一的选择似乎是使用带有 VBA 的 Windows API 以某种方式自动执行此步骤,但是,即便如此,似乎也无法处理这个讨厌的弹出窗口。我尝试使用 Spy++ 查找窗口,但它似乎没有显示为单独的窗口: 在此处输入图像描述

我现在能想到的唯一解决方案是获取父 Edge 浏览器窗口的窗口大小,将鼠标导航到“另存为”按钮的大致位置,然后使用 VBA 和 Windows API 在此处单击它。显然,这不是一个很好的解决方案,因为它非常脆弱,并且很容易因最小的错位而破裂。

有没有其他方法可以自动执行此步骤,不需要移动鼠标并自动“手动”单击,仅使用带有 Selenium 的 VBA?

标签: excelvbaseleniummicrosoft-edgechromium

解决方案


Selenium 仅适用于浏览器网页自动化。弹出窗口不是 wab 页面的一部分,因此 Selenium 将无法识别它。

而且我认为 Selenium 中的任何设置"download.prompt_for_download"都不会生效。弹出窗口由浏览器设置控制,浏览器设置由你的组策略控制,你不能用 Selenium 设置覆盖它。

我认为唯一的方法是使用一些 3rd 方 UI 自动化库与 Selenium 一起单击该选项,就像您在问题中所说的那样。


推荐阅读