【问题标题】:How to open an URL in a browser using VBA?如何使用 VBA 在浏览器中打开 URL?
【发布时间】:2021-07-12 03:13:45
【问题描述】:

尝试打开带有引用者的 PDF(-网站),该引用者只能通过在父页面上单击链接来打开。

通过使用

 CreateObject(WinHttp.WinHttpRequest.5.1) 
.setRequestHeader "referer", "https://...“ 

访问有效,但我需要在浏览器中打开页面才能查看 pdf。

找到这个:

https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa752094(v=vs.85)

语法:object.Navigate2(URL, Flags, TargetFrameName, PostData, Headers)

(PostData [输入,可选] 标题 [in, optional])

尝试过

 Dim IE As InternetExplorer  
 Set IE = New InternetExplorer 
    
   With IE
    .Navigate2
    https://main...,
    "https://referer..."

没有结果!有没有人有办法解决吗? (请只使用 VBA!谢谢)

【问题讨论】:

  • 您可以选择蠕虫罐头。您可以在使用 Internet Explorer 的地方打开蠕虫罐,并且必须与文件下载时的保存对话框进行交互,或者在您可以使用 chrome 但有额外设置的情况下打开 selenium basic tin。在这两种情况下,如果您要使浏览器自动化,我认为您需要在生成结果表之前执行这些步骤,然后单击 pdf 链接。我更喜欢 selenium basic 以避免保存对话的麻烦。在这些情况下,您无需设置引用标头。它们是由您在页面上的操作生成的。
  • ~~~~~o. open( url)&referer - 任意组合!

标签: excel vba web-scraping referer createobject


【解决方案1】:

我认为您在 Headers 参数中提供了错误的 Referer URL(以及错误的格式,除了Referer URL,您还需要包含Referer:),试试这个:

Private Sub Test()
    Dim oIE As InternetExplorer
    Set oIE = New InternetExplorer
        
    With oIE
        .Visible = True
        .navigate "https://www.zvg-portal.de/index.php?button=showAnhang&land_abk=ni&file_id=16396&zvg_id=6467", _
                    headers:="Referer: https://www.zvg-portal.de/index.php?button=showZvg&zvg_id=6467&land_abk=sh"
    End With
    oIE.Quit
    Set oIE = Nothing
End Sub 

【讨论】:

  • AAAAAAAAAAAAhhhhhhhhh .....我的天哪,它有效!我最喜欢的朋友圈越来越大了。这里的好人......先生。 QHARR 和吴先生:百万谢谢先生们!
  • 很高兴知道它有效!作为参考,我从 tek-tips.com/viewthread.cfm?qid=1263806 得到了这个想法
  • 不管你从哪里得到它,你真的帮助了我,我很感激。周末愉快:-)
  • 这是一个非常好的解决方案,因此请考虑接受。这不是必需的,您可以选择您喜欢的任何答案并等待未来的答案。作为新用户,请花点时间阅读:stackoverflow.com/help/someone-answers
  • 我总是忘记点击接受按钮然后投票!搞定了,谢谢提醒!
【解决方案2】:

赞成 Raymond 很容易知道。

如果您想长期使用,您可以按如下方式与下拉菜单进行交互。生成结果后,单击指向 pdf 的链接。请注意,第一个下拉列表有一个 onchange 事件,它将 select 中的值作为参数。

Option Explicit

Public Sub ClickDownloads()
    Dim ie As SHDocVw.InternetExplorer, html As MSHTML.HTMLDocument

    Set ie = New SHDocVw.InternetExplorer: Set html = New MSHTML.HTMLDocument

    With ie
        .Visible = True
        .Navigate2 "https://www.zvg-portal.de/index.php?button=Termine suchen"
 
        While .Busy Or .readyState <> READYSTATE_COMPLETE: DoEvents: Wend
    
        Dim evt As Object
        
        Set evt = .document.createEvent("HTMLEvents")
        evt.initEvent "onchange", True, False
        
        .document.querySelector("[value='ni']").Selected = True
        .document.parentWindow.execScript "updateAmtsgericht('ni');"
        .document.querySelector("[value='P2411']").Selected = True
        .document.querySelector("[type=submit]").Click
        
        While .Busy Or .readyState <> READYSTATE_COMPLETE: DoEvents: Wend
         
        Dim linkNodes As Object, i As Long
         
        Set linkNodes = .document.querySelectorAll("td:last-child a")
        
        For i = 0 To linkNodes.Length - 1
         
            linkNodes.Item(i).Click
            'Do something. Interact with save as dialogue to save. May also want to loop windows to close new tabls that were opened.
        Next
         
        Stop
 
        .Quit
    End With

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2014-02-10
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多