You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA通过Selenium为Edge/Chrome/Firefox设置Referer请求头

Selenium VBA 设置Referer请求头实现网页跳转

原IE环境下的可行代码

Sub OpenWebsiteVBA() 

Dim URL as String
Dim RefString as String
Dim oIE As InternetExplorer 

Set oIE = New InternetExplorer

With oIE
  URL = "https://www.xxxxxxxxxxx.com/index.php?button=Search"
  RefString = "ver_name=All&order_by=2&land_abk=eg&ver_id=3"
  .Navigate2 URL, Headers:="Referer: " & RefString
End With

End Sub

切换到Selenium后的问题

已安装Edge及edgedriver,Excel中添加了Selenium Type Library引用,但尝试多种常规方法设置Referer均无效,原尝试代码如下:

Sub OpenWebsiteSELENIUM()

Dim URL As String
Dim RefString As String

Set oEdge = New WebDriver   'or Set oIE = New ChromeDriver

With oEdge
  URL = "https://www.xxxxxxxxxxx.com/index.php?button=Search"
  RefString = "ver_name=All&order_by=2&land_abk=eg&ver_id=3"
  .start "edge"   'or .start "chrome"
  
 '.AddArgument ("Referer:" & RefString)                 <= doesn't work!
 '.SetPreference "Headers: ", "Referer: " & RefString   <= doesn't work!
 '.SetPreference "Referer: ", RefString                 <= doesn't work!
 '.SetPreference "Referer", RefString                   <= doesn't work!
 '.SetPreference "Referer=", RefString                  <= doesn't work!

  .Get URL

End With

End Sub

解决方案:利用CDP设置请求头

Selenium无法通过AddArgument或SetPreference直接设置Referer这类请求头,必须借助Chromium内核浏览器的CDP(Chrome DevTools Protocol)来实现,以下是适配Edge/Chrome的可行代码:

Sub OpenWebsiteWithReferer_Selenium()
    Dim driver As New WebDriver
    Dim URL As String
    Dim RefString As String
    Dim headers As Object
    
    URL = "https://www.xxxxxxxxxxx.com/index.php?button=Search"
    RefString = "ver_name=All&order_by=2&land_abk=eg&ver_id=3"
    
    ' 初始化浏览器(Edge为例,Chrome改为"chrome"即可)
    driver.Start "edge"
    
    ' 构造请求头字典
    Set headers = CreateObject("Scripting.Dictionary")
    headers("Referer") = RefString
    
    ' 通过CDP设置额外HTTP请求头
    driver.ExecuteChromeCommand "Network.setExtraHTTPHeaders", headers
    
    ' 启用网络监控,确保请求头生效
    driver.ExecuteChromeCommand "Network.enable", Empty
    
    ' 访问目标网址
    driver.Get URL
    
    ' 如需关闭浏览器,可添加 driver.Quit
End Sub

重要说明:

  • 必须调用Network.enable,否则设置的请求头不会被应用到后续网络请求中
  • 该方案适用于所有基于Chromium内核的浏览器(Edge、Chrome等)
  • 使用Scripting.Dictionary构造请求头,格式完全符合CDP的要求

内容的提问来源于stack exchange,提问作者Jasco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:31:57