zoukankan      html  css  js  c++  java
  • 搭建golang学习环境,并用chrome headless获取网页内容

    想用go练练手(我是win7系统,已从https://studygolang.com/dl 下载了go安装包并安装,比较简单,不详述。

    但作为边民,没法go get ,又不敢用梯子,幸亏有爱心大牛们的国内镜像。

    1、首先感谢gowalker.com,gopm.io 七牛 以及啃、萝卜、萝卜头go语言缔造者,以及sourcegraph.com ,studygolang, csdn, gitee(这里有一篇从码云clone代码的文章:https://www.cnblogs.com/shen-hua/p/6022740.html)

    2、因为国内用不了go get ,从gopm网页手工下载包太麻烦。后来发现有gopm工具。

    首先从https://gowalker.org/ 搜索 gopm,根据包在github上的路径github.com/gpmgo/gopm,到gopm.io上下载,保存到相应目录下。

    用go install安装,可能要根据错误提示修改目录名,及安装依赖包github.com/Unknwon/com

    3、我运行go install后,在$gopathin下生成gopm.exe(将这个路径加入环境变量,我的gopath路径设为了E:goapp,将手工下载的包放到了E:goappsrcgithub.com下。修改环境变量后可能需要重启电脑)

    4、我是在$gopathsrcgithub.com目录下运行:

    gopm get  github.com/chromedp/chromedp

    经过漫长等待,提示如下,

    E:goappsrcgithub.com>gopm get github.com/chromedp/chromedp
    [GOPM] 01-24 16:30:17 [ERROR] Skipped invalid package: net/htt
    p/httptrace@branch:<UTD>
    [GOPM] 01-24 16:30:17 [ERROR] golang.org/x/image: fail to rena
    me directory: rename C:/Users/Administrator/.gopm/repos/golang.org/x/image-183be
    bdce1b249c42a7cf6772817e8c2e873b966 C:/Users/Administrator/.gopm/repos/golang.or
    g/x/image: Access is denied.

    心中一惊,难道又要困死墙内!仔细一看,不是大问题,怀疑是360搞的鬼。于是按照提示手工修改文件名为 C:/Users/Administrator/.gopm/repos/golang.or

    g/x/image,成功。(我的是gopm将包下载到了C:UsersAdministrator.gopm epos 之下。)

    6、现在可以到http://www.runoob.com/go/go-tutorial.html入门学习了。

    7、使用以下代码测试一下chromedp

    // Command screenshot is a chromedp example demonstrating how to take a
    // screenshot of a specific element.
    package main
    
    import (
        "context"
        "io/ioutil"
        "log"
        "time"
    
        "github.com/chromedp/cdproto/cdp"
        "github.com/chromedp/cdproto/network"
        "github.com/chromedp/chromedp"
    )
    
    func main() {
        var err error
    
        // create context
        ctxt, cancel := context.WithCancel(context.Background())
        defer cancel()
    
        // create chrome instance
        c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
        if err != nil {
            log.Fatal(err)
        }
    
        // run task list
        var buf []byte
        //err = c.Run(ctxt, screenshot(`https://brank.as/`, `#contact-form`, &buf))
        err = c.Run(ctxt, screenshot(`http:/baidu.com/`, `#wrapper`, &buf))
    
        if err != nil {
            log.Fatal(err)
        }
    
        // shutdown chrome
        err = c.Shutdown(ctxt)
        if err != nil {
            log.Fatal(err)
        }
    
        // wait for chrome to finish
        err = c.Wait()
        if err != nil {
            log.Fatal(err)
        }
        
    
        err = ioutil.WriteFile("contact-form.png", buf, 0644)
        if err != nil {
            log.Fatal(err)
        }
    }
    
    func screenshot(urlstr, sel string, res *[]byte) chromedp.Tasks {
        return chromedp.Tasks{
            //设置UserAgent,不知道成功否?
            chromedp.ActionFunc(func(ctxt context.Context, h cdp.Executor) error {
                a := map[string]interface{}{
                    "UserAgent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"}
                network.SetExtraHTTPHeaders(a).
                    Do(ctxt, h)
                log.Println(a)
                return nil
            }),
            chromedp.Navigate(urlstr),
            chromedp.Sleep(2 * time.Second),
            chromedp.WaitVisible(sel, chromedp.ByID),
            chromedp.Sleep(20 * time.Second),
            //chromedp.WaitNotVisible(`div.v-middle > div.la-ball-clip-rotate`, chromedp.ByQuery),
            chromedp.Screenshot(sel, res, chromedp.NodeVisible, chromedp.ByID),
        }
    }

    运行后,在当前目录下生成了名为contact-form.png百度快照。

    可以用以下代码启动headless chrome ,可在windows任务管理器中看到。

    exec.Command("cmd", "/c", "start", "chrome", "--headless", "--remote-debugging-port=9222").Run()
  • 相关阅读:
    拓扑排序问题
    向陈越姥姥哭诉----关键活动
    最小生成树之Prim算法和Kruskal算法
    1212. Team Scores in Football Tournament
    1205. 每月交易II
    1098. 小众书籍
    1204. Last Person to Fit in the Elevator
    579. 查询员工的累计薪水
    1127. User Purchase Platform
    1225. 报告系统状态的连续日期
  • 原文地址:https://www.cnblogs.com/pu369/p/10315988.html
Copyright © 2011-2022 走看看