使用VBA在“默认浏览器”中打开URL,以捕获现有会话

时间:2019-04-08 23:25:32

标签: excel vba web-scraping url-redirection

我尝试在默认的浏览器(Chrome)中打开我已经登录(或告诉我是否登录)的Web应用程序的特定URL。当我将此URL复制/粘贴到浏览器地址栏中时,它可以正常工作。当我使用ThisWorkbook.FollowHyperlink通过VBA打开此URL时,它不是-然后作为一种回退-重定向到首页,而不是特定的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 (如果可能)。如果这不可能(例如,出于安全原因),那么在没有设置自己的重定向器的情况下进行重定向的最佳/最快方法是什么(该重定向器通过GET参数进行类似dereferer.org的重定向)?

2 个答案:

答案 0 :(得分:1)

如果允许您安装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

答案 1 :(得分:1)

一个笨拙且不明智的解决方法,但是您可以绕过FollowHyperlink,而是使用Shell在默认网站的新标签页/窗口中打开网站浏览器:

Shell "explorer ""https://www.example.com/function/edit/2019-04-09"""

(请注意,如果您在单元格中键入超链接并手动单击它,而不是使用VBA FollowHyperlink,则仍然会出现相同的问题。在Word和PowerPoint中也会发生这种情况。值得庆幸的是,您没有尝试捕获FollowHyperlink 事件并在窗口中“更正”该事件)

为回应评论-对于Mac,您将需要使用"open"而不是"explorer"。此代码应同时在Mac或PC上运行:

Shell IIf(Left(Application.Operatingsystem, 3)="Win","explorer ","open ") & _
    """https://www.example.com/function/edit/2019-04-09"""