使用 VBA 在默认浏览器中打开 URL 捕获现有会话
Use VBA to open URL in Default-Browser an catch existing Session
我尝试在默认浏览器 (Chrome) 中打开我已经登录(或者如果我没有登录则告诉我登录)的网络应用程序的特定 URL .当我 copy/paste 这个 URL 进入浏览器地址栏时,它完美地工作。当我用 VBA 和 ThisWorkbook.FollowHyperlink
打开这个 URL 时它不会 - 然后它重定向 - 作为一种后备 - 到主页而不是特定的 URL。
我发现这是一个会话问题,VBA 不知何故 recognize/catch 现有会话。
作为 "ugly workaround",我目前正在通过 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 的方法(如果可能)。如果这是不可能的(例如由于安全原因),那么 best/fastest 在不设置自己的重定向器的情况下进行重定向的方法是什么(像 dereferer.org 通过 GET 参数重定向)?
如果允许您安装 selenium basic,我会使用它
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
以新的tab/window 您的默认网络浏览器:
Shell "explorer ""https://www.example.com/function/edit/2019-04-09"""
(请注意,如果您在单元格中键入超链接并手动单击它,而不是使用 VBA FollowHyperlink
,那么同样的问题仍然会发生。这也会发生在 Word 和 PowerPoint 中。庆幸的是你没有试图捕捉 FollowHyperlink
事件 和 "correct" 在 window)
回应评论 - 对于 Mac,您需要使用 "open"
而不是 "explorer"
。此代码在 Mac 或 PC 上应 运行:
Shell IIf(Left(Application.Operatingsystem, 3)="Win","explorer ","open ") & _
"""https://www.example.com/function/edit/2019-04-09"""
我尝试在默认浏览器 (Chrome) 中打开我已经登录(或者如果我没有登录则告诉我登录)的网络应用程序的特定 URL .当我 copy/paste 这个 URL 进入浏览器地址栏时,它完美地工作。当我用 VBA 和 ThisWorkbook.FollowHyperlink
打开这个 URL 时它不会 - 然后它重定向 - 作为一种后备 - 到主页而不是特定的 URL。
我发现这是一个会话问题,VBA 不知何故 recognize/catch 现有会话。
作为 "ugly workaround",我目前正在通过 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 的方法(如果可能)。如果这是不可能的(例如由于安全原因),那么 best/fastest 在不设置自己的重定向器的情况下进行重定向的方法是什么(像 dereferer.org 通过 GET 参数重定向)?
如果允许您安装 selenium basic,我会使用它
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
以新的tab/window 您的默认网络浏览器:
Shell "explorer ""https://www.example.com/function/edit/2019-04-09"""
(请注意,如果您在单元格中键入超链接并手动单击它,而不是使用 VBA FollowHyperlink
,那么同样的问题仍然会发生。这也会发生在 Word 和 PowerPoint 中。庆幸的是你没有试图捕捉 FollowHyperlink
事件 和 "correct" 在 window)
回应评论 - 对于 Mac,您需要使用 "open"
而不是 "explorer"
。此代码在 Mac 或 PC 上应 运行:
Shell IIf(Left(Application.Operatingsystem, 3)="Win","explorer ","open ") & _
"""https://www.example.com/function/edit/2019-04-09"""