搭建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后,在$gopath\bin下生成gopm.exe(將這個路徑加入環境變量,我的gopath路徑設為了E:\goapp,將手工下載的包放到了E:\goapp\src\github.com下。修改環境變量后可能需要重啟電腦)

4、我是在$gopath\src\github.com目錄下運行:

gopm get  github.com/chromedp/chromedp

經過漫長等待,提示如下,

E:\goapp\src\github.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:\Users\Administrator\.gopm\repos\ 之下。)

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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM