Я пытаюсь открыть определенный URL-адрес веб-приложения, в котором я уже вошел в систему (или говорит мне войти, если я не вошел) в браузере по умолчанию (Chrome). Когда я копирую/вставляю этот URL-адрес в адресную строку браузера, он отлично работает. Это не так, когда я открываю этот URL-адрес с помощью VBA с помощью ThisWorkbook.FollowHyperlink
- тогда он перенаправляет - как своего рода запасной вариант - на домашнюю страницу вместо определенного URL-адреса.
Я узнал, что это проблема сеанса, и VBA почему-то не распознает/не перехватывает существующий сеанс.
В качестве «уродливого обходного пути» я в настоящее время перенаправляю http://www.dereferer.org/ на конкретный URL-адрес, что отлично работает, но требует дополнительного времени.
Это не работает:
ThisWorkbook.FollowHyperlink ("https://www.example.com/function/edit/2019-04-09)
Это работает:
ThisWorkbook.FollowHyperlink ("http://www.dereferer.org/?https://www.example.com/function/edit/2019-04-09)
(для моих нужд не требуется кодировать целевой URL)
Поскольку это перенаправление медленное и косвенное, я ищу способ напрямую открыть целевой URL-адрес при использовании существующей сессии (если возможно). Если это невозможно (например, из-за безопасности), какой лучший/самый быстрый способ перенаправить без настройки собственного перенаправителя (который перенаправляет, как dereferer.org, через параметр GET)?
Если вам разрешено установить базовый селен, я бы использовал это
Option Explicit
'download selenium https://github.com/florentbr/SeleniumBasic/releases/tag/v2.0.9.0
'Ensure latest applicable driver e.g. ChromeDriver.exe in Selenium folder
'VBE > Tools > References > Add reference to selenium type library
Public Sub DownloadFile()
Dim d As WebDriver
Set d = New ChromeDriver
Const URL = "url"
With d
.Start "Chrome"
.get URL
'login steps
.get 'otherUrl'
Stop '<delete me later
.Quit
End With
End Sub
Неуклюжий и опрометчивый обходной путь, но вы мог обходите FollowHyperlink
и вместо этого используете Shell
, чтобы открыть веб-сайт в новой вкладке/окне вашего веб-браузера по умолчанию:
Shell "explorer ""https://www.example.com/function/edit/2019-04-09"""
(В качестве примечания: если вы введете гиперссылку в ячейку и щелкнете по ней вручную вместо использования VBA FollowHyperlink
, то та же проблема все равно возникнет. Это также происходит в Word и PowerPoint. Просто будьте благодарны, что вы не пытаетесь поймать FollowHyperlink
мероприятие и "исправить" это в окошке)
В ответ на комментарии - для Mac вам нужно будет использовать "open"
вместо "explorer"
. Этот код должен работать как на Mac, так и на ПК:
Shell IIf(Left(Application.Operatingsystem, 3) = "Win","explorer ","open ") & _
"""https://www.example.com/function/edit/2019-04-09"""
Вечером проверю ваше решение. Спасибо также за замечание, связанное с гиперссылкой. Для моей текущей цели это должно работать, так как я сопоставил Sub/Macro с кнопкой. Еще один вопрос: знаете ли вы, работает ли это также для Excel на Mac? (У меня его нет, и я не могу его протестировать, но хочу оставаться максимально совместимым).
@Энди, я считаю, что вам нужно изменить "explorer ""https://www.example.com/function/edit/2019-04-09"""
на "open ""https://www.example.com/function/edit/2019-04-09"""
для Mac
Большое спасибо! Это сработало отлично и очень быстро (я не тестировал версию для Mac, но, судя по тому, что я нашел в сети, тоже должен) именно так, как я и планировал. Иногда решение может быть таким простым, КОГДА ты его наконец узнаешь...
Большое спасибо за этот творческий ответ - как ни странно, я только что изучил подход Selenium VBA. Но для моего конкретного случая это было бы излишеством, так как мне просто нужно открыть определенный URL-адрес и не хочу создавать зависимости, если это не критично.