这段代码的问题在于,它启动 Google Chrome 浏览器时使用了 'cmd.Run()' 方法,这会阻塞当前的 Goroutine 直到浏览器进程退出。这意味着在浏览器进程运行期间,程序将无法执行任何其他操作。

为了避免这个问题,可以使用 'cmd.Start()' 方法来启动浏览器进程,这样会立即返回。然后可以使用 'cmd.Process.Wait()' 方法来等待浏览器进程退出。这样可以让程序在浏览器进程运行期间执行其他操作。

另外,需要注意的是,启动浏览器进程后,还需要等待一段时间让浏览器初始化完成。可以使用 'time.Sleep()' 方法来等待一段时间。

最终代码示例:

cmd := exec.Command("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "--remote-debugging-port=9222", "--headless")
err := cmd.Start()
if err != nil {
    log.Fatal(err)
}

// 等待浏览器初始化完成
time.Sleep(3 * time.Second)

container := launcher.MustResolveURL("127.0.0.1:9222")
browser := rod.New().ControlURL(container).MustConnect().MustPage("https://www.bilibili.com/read/home")

fmt.Println(
    browser.MustEval("() => document.title"),
)

// 等待浏览器进程退出
cmd.Process.Wait()
Go 代码优化:如何避免启动 Chrome 浏览器时阻塞主程序

原文地址: https://www.cveoy.top/t/topic/odC0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录