У меня есть макрос, использующий Selenium, который открывает Chrome, переходит в одно из наших веб-приложений и загружает 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://********")
, который я нашел в одном из ответов на похожие вопросы об открытии файлов из Интернета.
Я пробовал коды типа
While Not ActiveWorkbook.name Like "export*"
Application.Wait (Now + TimeValue("0:00:01"))
DoEvents
Wend
с различными версиями кода, которые должны остановить выполнение кода, например Sleep 1000
, bot.Wait 1000
из самого селена или Do Until Now > Start + TimeValue("0:00:05")
.Все с DoEvents или без.Все вылилось в одно и то же - файл загружен, но, кажется, не было никаких попыток открыть его, независимо от того, как долго я жду.
Если я поставлю туда Stop
вместо кода ожидания, файлоткрывается почти сразу, но тогда у меня нет возможности запустить его снова с некоторым кодом.Я думаю, что я мог бы создать обходной путь, сохранив файл в определенном месте, используя
bot.SetPreference "download.default_directory", myFolder
bot.SetPreference "download.directory_upgrade", True
, а затем получить имя последнего загруженного файла из менеджера загрузок, чтобы я мог открыть его сразу после нескольких секунд ожиданиядля загрузки, чтобы завершить, где (я думаю) макрос будет либо ждать, либо некоторые коды ожидания будут работать, но это кажется ужасно сложным способом сделать что-то.
Я что-то упустил из-за кода ожидания?Я был бы очень признателен за любую помощь.