想用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目录下运行:

  1. gopm get github.com/chromedp/chromedp

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

  1. E:\goapp\src\github.com>gopm get github.com/chromedp/chromedp
  2. [GOPM] [36m01- ::[0m [[31mERROR[0m] Skipped invalid package: net/htt
  3. p/httptrace@branch:<UTD>
  4. [GOPM] [36m01- ::[0m [[31mERROR[0m] golang.org/x/image: fail to rena
  5. me directory: rename C:/Users/Administrator/.gopm/repos/golang.org/x/image-183be
  6. bdce1b249c42a7cf6772817e8c2e873b966 C:/Users/Administrator/.gopm/repos/golang.or
  7. 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

  1. // Command screenshot is a chromedp example demonstrating how to take a
  2. // screenshot of a specific element.
  3. package main
  4.  
  5. import (
  6. "context"
  7. "io/ioutil"
  8. "log"
  9. "time"
  10.  
  11. "github.com/chromedp/cdproto/cdp"
  12. "github.com/chromedp/cdproto/network"
  13. "github.com/chromedp/chromedp"
  14. )
  15.  
  16. func main() {
  17. var err error
  18.  
  19. // create context
  20. ctxt, cancel := context.WithCancel(context.Background())
  21. defer cancel()
  22.  
  23. // create chrome instance
  24. c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
  25. if err != nil {
  26. log.Fatal(err)
  27. }
  28.  
  29. // run task list
  30. var buf []byte
  31. //err = c.Run(ctxt, screenshot(`https://brank.as/`, `#contact-form`, &buf))
  32. err = c.Run(ctxt, screenshot(`http:/baidu.com/`, `#wrapper`, &buf))
  33.  
  34. if err != nil {
  35. log.Fatal(err)
  36. }
  37.  
  38. // shutdown chrome
  39. err = c.Shutdown(ctxt)
  40. if err != nil {
  41. log.Fatal(err)
  42. }
  43.  
  44. // wait for chrome to finish
  45. err = c.Wait()
  46. if err != nil {
  47. log.Fatal(err)
  48. }
  49.  
  50. err = ioutil.WriteFile("contact-form.png", buf, )
  51. if err != nil {
  52. log.Fatal(err)
  53. }
  54. }
  55.  
  56. func screenshot(urlstr, sel string, res *[]byte) chromedp.Tasks {
  57. return chromedp.Tasks{
  58. //设置UserAgent,不知道成功否?
  59. chromedp.ActionFunc(func(ctxt context.Context, h cdp.Executor) error {
  60. a := map[string]interface{}{
  61. "UserAgent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"}
  62. network.SetExtraHTTPHeaders(a).
  63. Do(ctxt, h)
  64. log.Println(a)
  65. return nil
  66. }),
  67. chromedp.Navigate(urlstr),
  68. chromedp.Sleep( * time.Second),
  69. chromedp.WaitVisible(sel, chromedp.ByID),
  70. chromedp.Sleep( * time.Second),
  71. //chromedp.WaitNotVisible(`div.v-middle > div.la-ball-clip-rotate`, chromedp.ByQuery),
  72. chromedp.Screenshot(sel, res, chromedp.NodeVisible, chromedp.ByID),
  73. }
  74. }

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

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

  1. exec.Command("cmd", "/c", "start", "chrome", "--headless", "--remote-debugging-port=9222").Run()

搭建golang学习环境,并用chrome headless获取网页内容的更多相关文章

  1. golang使用chrome headless获取网页内容

    如今动态渲染的页面越来越多,爬虫们或多或少都需要用到headless browser来渲染待爬取的页面. 而最近广泛使用的headless browser解决方案PhantomJS已经宣布不再继续维护 ...

  2. Windows下visual studio code搭建golang开发环境

    Windows下visual studio code搭建golang开发环境 序幕 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org),导致一些包无法安装 ...

  3. 用Qemu搭建aarch32学习环境

    作者信息 作者: 彭东林 邮箱: pengdonglin137@163.com QQ: 405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linu ...

  4. 用Qemu搭建x86_64学习环境

    作者信息 作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linux内核 ...

  5. 用Qemu搭建x86学习环境

    作者信息 作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linux内核 ...

  6. 云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 (阿里云ECS服务器 )课堂

    云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 1. 开通云服务器 2 1.包年包月   按量付费(适合测试数据的时候) 2 2.地域   服务器数 ...

  7. 使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)

    开发环境 PC:ubuntu18.04 Qemu:4.1 Kernel:Linux-5.2 概述 由于要学习ARM的SVE技术,但是目前还没有支持SVE指令的板子,所以只能用Qemu来模拟,但是发现Q ...

  8. 基于Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度学习环境

    基于Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度学习环境 前言一.环境准备环境介绍软件下载VMware下安装UbuntuUbuntu下Anaconda的安 ...

  9. ubuntu18.04下搭建深度学习环境anaconda2+ cuda9.0+cudnn7.0.5+tensorflow1.7【原创】【学习笔记】

    PC:ubuntu18.04.i5.七彩虹GTX1060显卡.固态硬盘.机械硬盘 作者:庄泽彬(欢迎转载,请注明作者) 说明:记录在ubuntu18.04环境下搭建深度学习的环境,之前安装了cuda9 ...

随机推荐

  1. HTML5 常用标签整理

    <!--1.  html5 文本 --> <div> <header> <hgroup> <h1>h1</h1> <h2& ...

  2. BZOJ3453: tyvj 1858 XLkxc(拉格朗日插值)

    题意 题目链接 Sol 把式子拆开,就是求这个东西 \[\sum_{i = 0} ^n \sum_{j = 1}^{a + id} \sum_{x =1}^j x^k \pmod P\] 那么设\(f ...

  3. application.properties多环境配置文件、jar包外部配置文件、配置项加密、程序中配置使用

    一.简介 spring boot项目application.properties文件存放及使用介绍 二.方法一多环境配置文件 我们一般都会有多个应用环境,开发环境.测试环境.生产环境,各个环境的配置会 ...

  4. Nginx 部署多个 web 项目(虚拟主机)

    1,创建 www 目录 2,在 www 目录下创建 test1 和 test2 目录,表示两个项目 3,test1 下创建 test1.html 4,test2 下创建 test2.html 5,配置 ...

  5. 章节七、2-Linked List

    package introduction9; import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...

  6. (后端)根据查询语句修改的update语句

    UPDATE A SET a.name = m.name FROM item A INNER JOIN table M ON A.id=M.id WHERE a.xx <> M.xx

  7. 使用VSTS的Git进行版本控制(一)——复制现有仓库

    使用VSTS的Git进行版本控制(一)--复制现有仓库 概述 Team Services支持两种类型的版本控制Git和Team Foundation Version Control (TFVC).以下 ...

  8. C#-判断语句(五)

    判断语句主要有if...else.switch和 条件?语句1:语句2 三种,而if...else中又有if语句,if...else.if...else if...else和if中嵌套if这几种,但是 ...

  9. Ubuntu下永久修改主机名和创建用户

    使用hostname 进行修改. 创建用户,修改密码

  10. 在Django中接收文件并存储

    首先是一个views函数的例子 def get_user_profiles(request): if request.method == 'POST': myFile = request.FILES. ...