1 Chromedp是什么

chromedp是一个更快、更简单的Golang库用于调用支持Chrome DevTools协议的浏览器,同时不需要额外的依赖(例如Selenium和PhantomJS)

Chrome和Golang都与Google有着相当密切的关系,而Chrome DevTools其实就是Chrome浏览器按下F12之后的控制终端

2 为什么不使用Selenium

对于Golang开发来说,使用chromedp更为便捷,因为它仅仅需要Chrome浏览器而并不需要依赖ChromeDriver,省去了依赖问题,有助于自动化的构建和多平台架构的迁移

3 文章解决了什么需求

  • 如何使用chromedp进行二维码登陆
  • 如何保存Cookies实现短时间免登陆

网站会更新,文章不保证更新,请务必学会举一反三

4.如何使用chromedp进行二维码登陆

4.1 安装chromedp

  • 下载并安装Chrome浏览器
  • 创建Golang项目,开启Go Module(在项目目录下使用终端输入go mod init)
  • 在项目目录下使用终端输入:

(如果有依赖问题请删除-u)

4.2 尝试打开网站

(以金山文档https://account.wps.cn/为例)

1.重新设置chromedp使用"有头"的方式打开,以便于我们进行debug

2.创建chromedp上下文对象

3.执行自定义的任务

4.至此程序的初始化过程已经完成,接下来就是任务——打开登陆页面

5.运行一下程序,可以看到Chrome被打开,同时访问了我们指定的网站

4.3 获取二维码(点击过程)

1.需要点击微信登陆按钮,先找到按钮的选择器,右键按钮并在菜单中点击检查,然后可以看到按钮的元素

2.右键元素打开菜单找到copy下的copy selector,即获取到选择器

3.我们尝试点击微信登陆按钮,发现还需要点击一下确认,重复上述步骤获取确认按钮的选择器

4.用代码执行上述点击步骤

5.运行程序即可直达二维码展示界面

6.用同样的方式,获取二维码图片的选择器

7.用代码实现获取二维码

有两点需要注意,第一是二维码有加载过程,第二是二维码是元素渲染,

我们需要用截图的方式获取(也可以用js来获取对应的href并下载,但是为了照顾小白,选择最简单的)

8.执行程序即可发现目录下已经存储了二维码图片文件,我们可以通过扫描此二维码进行登陆,与浏览器上扫描为同一种效果

5. 如何将二维码展示在无图形化的终端上

(与chromedp无关,属于额外内容)

1.在上述步骤中,我们已经获取了二维码,接下来我们需要在终端显示二维码,首先是解码,这里使用gozxing库

3.修改我们第二步的过程

4.运行程序即可查看效果

6. 如何保存Cookies实现短时间免登陆

1.在上述过程中,我们可以通过二维码扫描登陆,网站会在登陆之后进行跳转,跳转后我们需要保存cookies来维持我们的登录状态,代码实现如下

2.获取到Cookies之后,我们需要在程序运行时将Cookies从临时文件中加载到浏览器中

3.通过上述两步我们已经可以保持登陆状态,然后我们需要检查一下是否成功,这里调用浏览器执行js脚本获取当前页面的网址,判断是否已经个人中心页面,如果为真,则停止操作

4.最终重新设置我们的浏览器任务即可

5.我们使用已经登陆的cookies运行程序可以发现我们成功跳过登陆过程