go如何调用chrome打开指定网页

Imstrong · 2017-12-27 12:48:07 · 7507 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-12-27 12:48:07 的主题,其中的信息可能已经有所发展或是发生改变。

为方便测试,想做一个运行web应用后自动打开浏览器的功能,应该如何实现


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

7507 次点击  ∙  1 赞  
加入收藏 微博
10 回复  |  直到 2019-01-25 15:49:33
leavesdrift
leavesdrift · #1 · 7年之前

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

xjjrocker
xjjrocker · #2 · 7年之前

mark,不知道为什么我同样的语句,希望实现的就是自动打开默认浏览器访问个网址,就是出不来效果,回头再试试。

victorl
victorl · #3 · 7年之前

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)

    }
}
Imstrong
Imstrong · #4 · 7年之前
leavesdriftleavesdrift #1 回复

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下无效啊

leavesdrift
leavesdrift · #5 · 7年之前
package main

import (
    "os/exec"
)

func main() {
    cmd := exec.Command("cmd", "/C", "start http://www.baidu.com")
    cmd.Run()
}

亲测可用啊

leavesdrift
leavesdrift · #6 · 7年之前

linux 下 cmd := exec.Command("bash", "-c", "xdg-open http://www.baidu.com")

leavesdrift
leavesdrift · #7 · 7年之前

测试了下好像还是必须要 cmd /Cbash -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"`)
Imstrong
Imstrong · #8 · 7年之前
leavesdriftleavesdrift #7 回复

测试了下好像还是必须要 `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后面执行的,这个方法是一个无限循环,只有跳出循环才能执行下面的代码,那么应该怎么实现在成功启动并监听相应端口之后再打开浏览器呢,好像无法实现啊

huasheng28
huasheng28 · #9 · 7年之前

PhantomJS + Selenium +chromedriver

popwalker
popwalker · #10 · 6年之前

这个包已经封装好了:github.com/pkg/browser

只需要调用一个方法即可:browser.OpenURL("http://www.baidu.com")

这个package包含了window,linux,macOS的实现,具体可以看其源码,基本就是调用上面答案所提到的命令

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传