【问题标题】:Handling file download popup of chromium browsers using VBA使用 VBA 处理 chromium 浏览器的文件下载弹出窗口
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多