golang chromedp简单学习

jinnzy · · 6311 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

需求

有一项重复性工作,就是每天打开监控系统输入一些内容查询结果并截图然后检查发送日报,所以就在想能不能使用go来完成部分工作,查找之后就发现了chromedp,使用起来之后还是发现不少的坑。

安装

因为安装的时候一些包要翻墙,所以使用gopm下载包,具体可以百度gopm

gopm get github.com/chromedp/chromedp

报错

  • 刚下载完跑demo,这里提示这几行。
    demo 地址https://raw.githubusercontent.com/chromedp/examples/master/click/main.go

    image.png

    我的解决方法是进入handler.go把这几个类型注释掉,如果还有其他好的办法可以告诉我

  • 解决掉上面几行之后,继续跑官方的demo发现还有报错


    image.png

    报了空指针的错,经过一番查找之后$GOPATH\src\github.com\mailru\easyjson\helpers.go下面的v值有空值的情况,于是增加了一个判断,为空直接返回,这样就能继续跑下去了。


    image.png

使用

常用的选择器

chromedp.BySearch // 如果不写,默认会使用这个选择器,类似devtools ctrl+f 搜索
chromedp.ByID // 只id来选择元素
chromedp.ByQuery // 根据document.querySelector的规则选择元素,返回单个节点
chromedp.ByQueryAll // 根据document.querySelectorAll返回所有匹配的节点
chromedp.ByNodeIP // 检索特定节点(必须先有分配的节点IP),这个暂时没用过也没看到过例子,如果有例子可以发给我看下

常用api

chromedp.Navigate("https://xxxx") // 设置url
chromedp.WaitVisible(`#username`, chromedp.ByID), //  使用chromedp.ByID选择器。所以就是等待id=username的标签元素加载完。
chromedp.SendKeys(`#username`, "username", chromedp.ByID), // 使用chromedp.ByID选择器。向id=username的标签输入username。
chromedp.Value(`#input1`, val1, chromedp.ByID), // 获取id=input1的值,并把值传给val1
chromedp.Click("btn-submit",chromedp.Bysearch), // 触发点击事件,
chromedp.Screenshot(`#row`, &buf, chromedp.ByID), // 截图id=row的标签,把值传入buf 需要事先定义var buf []byte 
chromedp.ActionFunc(func(context.Context, cdp.Executor) error { // 将图片写入文件
 return ioutil.WriteFile("test.png", buf, 0644)
}),

剩下的有时间补充。


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

本文来自:简书

感谢作者:jinnzy

查看原文:golang chromedp简单学习

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

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