首页 > 解决方案 > Selenium VBA 等待 excel 自动打开下载的 csv

问题描述

我有一个使用 Selenium 的宏,它打开 chrome,导航到我们的一个 Web 应用程序并通过右键单击并选择下载来下载 csv 文件:

Sub reporting_extractor()
Dim bot As New selenium.WebDriver

    bot.SetPreference "download.extensions_to_open", "csv"

    bot.Start "chrome", "http://******************************"
    bot.Get "/"
    bot.Window.Maximize

    bot.FindElementByXPath("//th[contains(text(),'SiteA')]").ClickContext
    bot.FindElementByXPath("//ul[@class='dropdown-menu']/li/a").Click '"download as csv" in context menu

    'wait for file to open

    'perform actions in opened file

End Sub

由于“download.extensions_to_open”,csv 文件在下载时会自动在 excel 中打开,但问题是代码在下载文件时试图继续,并且总是会导致错误。不幸的是,该文件是在我单击下载按钮时创建的,因此我无法使用WorkBooks.open("https://********")在有关从 Web 打开文件的类似问题的答案之一中找到的文件。

我试过这样的代码

    While Not ActiveWorkbook.name Like "export*"
        Application.Wait (Now + TimeValue("0:00:01"))
        DoEvents
    Wend

使用不同版本的代码应该停止代码的执行,例如Sleep 1000bot.Wait 1000从 selenium 本身或Do Until Now > Start + TimeValue("0:00:05"). 有或没有 DoEvents 的一切。一切都导致了同样的事情 - 文件已下载,但无论我等待多长时间似乎都没有尝试打开它。

如果我放在Stop那里而不是等待代码,文件几乎会立即打开,但是我无法用一些代码再次启动它。我想我可以通过使用将文件保存到特定位置来创建解决方法

bot.SetPreference "download.default_directory", myFolder
bot.SetPreference "download.directory_upgrade", True

然后从下载管理器中获取最新下载文件的名称,因此我可以在等待几秒钟后直接打开它以完成下载,其中(我认为)宏会等待或某些等待代码会起作用,但这似乎是一种非常复杂的做事方式。

我是否遗漏了有关等待代码的内容?我将非常感谢任何帮助。

标签: excelvbaselenium

解决方案


推荐阅读