为方便测试,想做一个运行web应用后自动打开浏览器的功能,应该如何实现
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
windows 下利用 cmd /C start htttp://www.baidu.com
cmd /C start htttp://www.baidu.com
linux 下利用 xdg-open http://www.baidu.com
xdg-open http://www.baidu.com
mac 下利用start http://www.baidu.com
start http://www.baidu.com
start, xdg-open 分别是windows和mac, linux打开系统默认程序的工具,所以你要使用谷歌打开就必须要把谷歌浏览器设置为默认,linux下不要使用root权限使用xdg-open,windows下失败可以尝试在管理员权限下的cmd执行你的程序
程序我就偷懒不写了哈,调用子程序就行了。go在windows下好像不需要 cmd /C,好像会自动使用shell
mark,不知道为什么我同样的语句,希望实现的就是自动打开默认浏览器访问个网址,就是出不来效果,回头再试试。
ChromeDriver PhantomJS Selenium 可以使用这个第三方库 github.com/sclevine/agouti
package main import ( "fmt" "time" "github.com/sclevine/agouti" ) func main() { // cd := agouti.ChromeDriver() // cd := agouti.PhantomJS() // cd := agouti.Selenium() cd := agouti.Selendroid("./selenium-server-standalone-3.5.2.jar") err := cd.Start() if err != nil { fmt.Println("Start webDriver:", err) return } defer cd.Stop() pg, err := cd.NewPage(agouti.Browser("chrome")) if err != nil { fmt.Println("NewPage:", err) return } err = pg.SetPageLoad(10000) if err != nil { fmt.Println("SetPageLoad:", err) return } err = pg.SetScriptTimeout(1000) if err != nil { fmt.Println("SetScriptTimeout:", err) return } err = pg.Navigate("https://www.baidu.com/") if err != nil { fmt.Println("Navigate:", err) return } for { title, err := pg.Title() if err != nil { fmt.Println("Title:", err) return } fmt.Println(title) sc := pg.FindByLink("新闻") // str, err := sc.Text() // if err != nil { // fmt.Println("str:", err) // return // } // fmt.Println(str) err = sc.Click() if err != nil { fmt.Println("click:", err) return } title, err = pg.Title() if err != nil { fmt.Println("Title2:", err) return } fmt.Println(title) //sleep time.Sleep(2 * time.Second) err = pg.Back() if err != nil { fmt.Println("Back:", err) return } //sleep time.Sleep(2 * time.Second) } }
windows 下利用 `cmd /C start htttp://www.baidu.com` linux 下利用 `xdg-open http://www.baidu.com` mac 下利用`start http://www.baidu.com` start, xdg-open 分别是windows和mac, linux打开系统默认程序的工具,所以你要使用谷歌打开就必须要把谷歌浏览器设置为默认,linux下不要使用root权限使用xdg-open,windows下失败可以尝试在管理员权限下的cmd执行你的程序 程序我就偷懒不写了哈,调用子程序就行了。go在windows下好像不需要 cmd /C,好像会自动使用shell
windows下无效啊
package main import ( "os/exec" ) func main() { cmd := exec.Command("cmd", "/C", "start http://www.baidu.com") cmd.Run() }
亲测可用啊
linux 下 cmd := exec.Command("bash", "-c", "xdg-open http://www.baidu.com")
cmd := exec.Command("bash", "-c", "xdg-open http://www.baidu.com")
测试了下好像还是必须要 cmd /C 和 bash -c 的,否则会报错,无法在 path 中找到可执行的 start ,那就统一加上吧。 /C和-c参数代表combine command,加上这个参数可以执行一个完整的command,例如:
cmd /C
bash -c
start
/C
-c
windows
//终端宽度 cmd := exec.Command("cmd", "/C", "mode con|findStr Columns ")
linux
cmd := exec.Command("bash", "-c", `ls | grep "abc"`)
测试了下好像还是必须要 `cmd /C` 和 `bash -c` 的,否则会报错,无法在 path 中找到可执行的 `start` ,那就统一加上吧。 `/C`和`-c`参数代表combine command,加上这个参数可以执行一个完整的command,例如: windows ``` //终端宽度 cmd := exec.Command("cmd", "/C", "mode con|findStr Columns ") ``` linux ``` cmd := exec.Command("bash", "-c", `ls | grep "abc"`) ```
我试了一下,确实是可以的,因为我实在http.ListenAndServe后面执行的,这个方法是一个无限循环,只有跳出循环才能执行下面的代码,那么应该怎么实现在成功启动并监听相应端口之后再打开浏览器呢,好像无法实现啊
PhantomJS + Selenium +chromedriver
这个包已经封装好了:github.com/pkg/browser
github.com/pkg/browser
只需要调用一个方法即可:browser.OpenURL("http://www.baidu.com")
browser.OpenURL("http://www.baidu.com")
这个package包含了window,linux,macOS的实现,具体可以看其源码,基本就是调用上面答案所提到的命令
`单行代码`
windows 下利用
cmd /C start htttp://www.baidu.com
linux 下利用
xdg-open http://www.baidu.com
mac 下利用
start http://www.baidu.com
start, xdg-open 分别是windows和mac, linux打开系统默认程序的工具,所以你要使用谷歌打开就必须要把谷歌浏览器设置为默认,linux下不要使用root权限使用xdg-open,windows下失败可以尝试在管理员权限下的cmd执行你的程序
程序我就偷懒不写了哈,调用子程序就行了。go在windows下好像不需要 cmd /C,好像会自动使用shell
mark,不知道为什么我同样的语句,希望实现的就是自动打开默认浏览器访问个网址,就是出不来效果,回头再试试。
ChromeDriver PhantomJS Selenium 可以使用这个第三方库 github.com/sclevine/agouti
windows下无效啊
亲测可用啊
linux 下
cmd := exec.Command("bash", "-c", "xdg-open http://www.baidu.com")
测试了下好像还是必须要
cmd /C
和bash -c
的,否则会报错,无法在 path 中找到可执行的start
,那就统一加上吧。/C
和-c
参数代表combine command,加上这个参数可以执行一个完整的command,例如:windows
linux
我试了一下,确实是可以的,因为我实在http.ListenAndServe后面执行的,这个方法是一个无限循环,只有跳出循环才能执行下面的代码,那么应该怎么实现在成功启动并监听相应端口之后再打开浏览器呢,好像无法实现啊
PhantomJS + Selenium +chromedriver
这个包已经封装好了:
github.com/pkg/browser
只需要调用一个方法即可:
browser.OpenURL("http://www.baidu.com")
这个package包含了window,linux,macOS的实现,具体可以看其源码,基本就是调用上面答案所提到的命令