【发布时间】:2021-02-22 16:54:45
【问题描述】:
我正在使用 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?
【问题讨论】:
-
一些想法.. 一切都可能很糟糕,因为我没有任何 VBA 经验。 1 您可以尝试设置 oWebDriver.setPreference “download.prompt_for_download”,如本例所示为 False:stackoverflow.com/questions/32157107/…。由于 edge 和 chome 都是铬,所以应该没问题。
-
2.如果这不起作用,可能会找到一个便携式边缘浏览器并将启动指向该二进制文件,再次不知道如何在 VBA 中执行此操作,它应该类似于 java:EdgeOptions options = new EdgeOptions() options.addExtensions(new File("/path/to/extension.crx")) options.setBinary(new File("/path/to/edge"));
-
3.仅通过执行 API get 调用并查看它是否返回文件来验证 href 地址是否有效。
-
如果我在 Chrome 中手动执行此操作,则没有提示。那么,此提示是否特定于您 .click 的 vba selenium ?
-
@art_architect 谢谢你的建议,我明天试试
oWebDriver.setPreference "download.prompt_for_download"。我在写这篇文章时就知道了这种方法,我只是假设它不起作用,因为这个选项应该被锁定(见我的问题)。 @QHarr 提示出现在 Microsoft Edge(版本 88)中,不幸的是,Chrome 在我工作的环境中不可用。我为标题道歉,不知何故我错误地认为问题也会存在于 Chrome 中......
标签: excel vba selenium microsoft-edge chromium