You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel VBA网页抓取:Chrome隐藏方法及Chrome/Edge+Selenium隐藏可行性咨询

Excel VBA + Selenium:隐藏Chrome/Edge浏览器的方案

嘿,刚好我之前也折腾过这个问题,来给你详细说说:

首先明确一点:Selenium控制Chrome/Edge时,没有像IE那样直接的.Visible = False属性,但我们有更高效的方式实现浏览器隐藏——就是用「无头模式(Headless Mode)」,这也是现在网页抓取的主流方案,因为它完全不渲染界面,资源占用比可视模式低很多。

一、隐藏Chrome浏览器的具体实现

你需要通过ChromeOptions对象添加启动参数,告诉Chrome以无头模式启动,具体VBA代码示例如下:

Sub ScrapeWithHiddenChrome()
    Dim driver As New ChromeDriver
    Dim chromeOpts As New ChromeOptions
    
    ' 关键:启用新版无头模式(Chrome 96+推荐用这个,兼容性更好)
    chromeOpts.AddArgument "--headless=new"
    ' 可选:禁用GPU,避免无头模式下的部分渲染问题
    chromeOpts.AddArgument "--disable-gpu"
    ' 可选:指定窗口大小,确保元素定位正常(无头模式也需要这个)
    chromeOpts.AddArgument "--window-size=1920,1080"
    ' 可选:模拟正常浏览器的UA,避免被网站反爬识别
    chromeOpts.AddArgument "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    
    ' 带着配置启动Chrome
    driver.Start "chrome", chromeOpts
    
    ' 接下来就是你的网页抓取逻辑了
    driver.Get "https://example.com"
    ' 比如获取页面标题:Debug.Print driver.Title
    ' ... 其他操作
    
    ' 别忘了关闭浏览器释放资源
    driver.Quit
End Sub

如果你的Chrome版本比较老(低于96),可以把--headless=new换成旧版的--headless,不过还是建议升级Chrome和Selenium到最新版,避免兼容性问题。

二、隐藏Edge浏览器的方法

Edge现在用的是Chromium内核,所以方法和Chrome几乎一模一样,只是把ChromeDriver换成EdgeDriverChromeOptions换成EdgeOptions即可:

Sub ScrapeWithHiddenEdge()
    Dim driver As New EdgeDriver
    Dim edgeOpts As New EdgeOptions
    
    edgeOpts.AddArgument "--headless=new"
    edgeOpts.AddArgument "--disable-gpu"
    
    driver.Start "edge", edgeOpts
    
    driver.Get "https://example.com"
    ' ... 你的抓取操作
    
    driver.Quit
End Sub

三、和IE的.Visible = False对比

IE之所以能直接设置.Visible = False,是因为它是系统自带的COM对象,VBA可以直接操控其界面属性;而Selenium控制Chrome/Edge是通过WebDriver协议,相当于远程控制浏览器,所以没有直接的可视性开关,无头模式是官方推荐的无界面运行方案,效果比单纯隐藏窗口更好——毕竟连界面渲染都省了,速度更快,占用资源更少。

如果你实在不想用无头模式(比如某些网站对无头模式做了反爬),也可以用「把窗口移到屏幕外」的折中方案:

' 在启动浏览器后,设置窗口位置到屏幕看不见的地方
driver.Manage.Window.SetPosition -2000, 0

不过这种方式浏览器其实还是在后台渲染界面,资源占用比无头模式高,不太推荐。

一些注意事项

  • 确保你已经安装了对应版本的ChromeDriver/EdgeDriver,并且和浏览器版本匹配(版本不匹配会报错)
  • 无头模式下,有些依赖界面的操作(比如弹窗、鼠标悬停)可能会有问题,需要提前处理
  • 如果遇到网站反爬,可以多添加一些模拟正常浏览器的启动参数,比如--no-sandbox--disable-dev-shm-usage

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

火山引擎 最新活动