excel - 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 1000
,bot.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
然后从下载管理器中获取最新下载文件的名称,因此我可以在等待几秒钟后直接打开它以完成下载,其中(我认为)宏会等待或某些等待代码会起作用,但这似乎是一种非常复杂的做事方式。
我是否遗漏了有关等待代码的内容?我将非常感谢任何帮助。
解决方案
推荐阅读
- html - 谷歌表 | 将单元格范围发送到电子邮件正文
- r - 在旧 R 版本上安装旧包版本
- pandas - 使用 Pandas groupby 连接多行中的字符串并从逗号分隔的单元格中删除重复项
- mongodb - Mongodb 4.2 未捕获的异常:错误:无法添加用户:命令 createUser 需要身份验证
- android - 如何在 android 的 Recyclerview 中使用间隔 RxJava
- python - REVIT API StandardError:无法转换身体!: ILLEGAL_ENTITY_MODIFICATION -- API_BEGIN/END 块外的实体修改
- html - 内容卡 HTML CSS
- php - 时间戳转换为错误的日期php
- python - 在 GCP 虚拟机上运行 MLFlow
- python - 我的清单应该制作 4 张 tkinter 图像,但只能制作 2 张照片