Excel VBA网页抓取:Chrome隐藏方法及Chrome/Edge+Selenium隐藏可行性咨询
嘿,刚好我之前也折腾过这个问题,来给你详细说说:
首先明确一点: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换成EdgeDriver,ChromeOptions换成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




