使用 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"""