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

如何在Go语言中隐藏Selenium Chrome Driver服务器命令窗口

问题描述

使用-ldflags -H=windowsgui编译Go程序生成exe后,程序可后台运行,但Chrome Driver的命令窗口会弹出,如何通过Go代码隐藏该窗口?

原代码示例:

import (
    "github.com/tebeka/selenium"
    "github.com/tebeka/selenium/chrome"
)

func main() error {
    // Run Chrome browser
    service, err := selenium.NewChromeDriverService("./chromedriver", 4444)
    if err != nil {
        panic(err)
    }
    defer service.Stop()

    caps := selenium.Capabilities{}
    caps.AddChrome(chrome.Capabilities{Args: []string{
        "window-size=1920x1080",
        "--no-sandbox",
        "--disable-dev-shm-usage",
        "disable-gpu",
        // "--headless",  // comment out this line to see the browser
    }})

    driver, err := selenium.NewRemote(caps, "")
    if err != nil {
        panic(err)
    }

    driver.Get("https://www.google.com")
}
解决方法

要隐藏Chrome Driver的控制台窗口,核心是在启动ChromeDriverService时配置进程启动属性,让chromedriver以无窗口方式运行。具体实现如下:

修改后的代码

import (
    "github.com/tebeka/selenium"
    "github.com/tebeka/selenium/chrome"
    "syscall"
)

func main() error {
    // 配置ChromeDriver启动选项:隐藏控制台窗口
    serviceOpts := []selenium.ServiceOption{
        selenium.WithOS(syscall.SysProcAttr{HideWindow: true}),
    }

    // 启动ChromeDriver服务并传入选项
    service, err := selenium.NewChromeDriverService("./chromedriver", 4444, serviceOpts...)
    if err != nil {
        panic(err)
    }
    defer service.Stop()

    caps := selenium.Capabilities{}
    caps.AddChrome(chrome.Capabilities{Args: []string{
        "window-size=1920x1080",
        "--no-sandbox",
        "--disable-dev-shm-usage",
        "--disable-gpu",
        // "--headless",  // 不需要Chrome可视窗口时可取消注释
    }})

    driver, err := selenium.NewRemote(caps, "")
    if err != nil {
        panic(err)
    }
    defer driver.Quit() // 确保退出时关闭浏览器进程

    driver.Get("https://www.google.com")
    return nil
}

关键细节

  • 引入syscall包,利用SysProcAttr{HideWindow: true}属性,强制chromedriver进程启动时隐藏控制台窗口
  • 通过selenium.WithOS()将该属性封装为服务选项,传入NewChromeDriverService方法
  • 添加defer driver.Quit()避免Chrome浏览器进程残留,优化资源管理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:37:55