博客园自动发帖--图像处理极验验证码

2018-08-21 10:23:43 浏览数 (1)

为了写这篇文章,先写了两篇爬虫cookies详解和selenium requests进行cookies保存读取操作,感兴趣的朋友可以看看前两篇文章。

这篇文章我主要是提供另一种滑动验证码的处理方式,看过我文章的朋友应该知道那篇极验验证码破解之selenium,在那篇文章中我们通过分析元素中的图片信息拼接完整图片和缺口图片,然后通过像素对比计算移动距离,使用selenium模拟拖动完成验证。

为什么要用图像处理的方式

在上一篇极验验证码破解的文章中,我们能找到图片拼接信息还原原来的图片,但是后来我发现在很多网站中极验验证码的显示都是使用canvas进行渲染的,在网页元素中是找不到图片信息的,例如我们要说的博客园登录

那么针对这种方式我们怎么获取图片进行缺口计算呢?很简单,截图

截图处理

这是弹出框显示的图片

这是点击拖动按钮显示的图片

那么我们只要把这两块图片截下来,然后把滑块部分过滤掉,其他部分进行像素对比,即可获取拖动距离。使用selenium进行截图保存很方便,但是要注意不同的浏览器截图方式不同,如果使用Firefox浏览器,可以直接获取图片元素,进行元素截图;如果使用chrome浏览器,此功能有BUG,我们可以进行浏览器截屏,然后把整个图片中图像部分进行裁剪处理,得到全图和缺陷图。

使用get_screenshot_as_file(filename)接口,将登录页面截图保存下来,然后获取canvas元素

得到x、y坐标和大小

代码语言:javascript复制

使用Image库打开保存的截图文件,然后使用crop函数进行截图,再使用灰度处理(灰度处理主要是为了减少像素点的处理,不是必须的)

代码语言:javascript复制

图片分析

通过观察图片我们发现每个缺口图片的都是处于最左侧,即最左侧部分为滑块,无需进行像素对比,对滑动块进行截图查看,宽度基本在60像素左右,我们可以直接越过前面这部分,但是保险起见我还是从开始进行像素计算,在得到第一个不同像素后,向后加 60像素,继续进行像素对比。

代码语言:javascript复制

移动处理

这里的移动处理同极验验证码破解之selenium中一样,具体解释可以查看上篇文章

代码语言:javascript复制

移动处理这里识别率不是很高,当我们移动失败后,要进行重试,如果验证成功后面提示显示登录成功,我们通过查看tip_btn元素的文本信息即可

进行多次尝试以后,拖动框会消失,点触式按钮显示点击重试,我们同样检测点触式按钮上是否显示点击重试字样,如果存在就执行一次点击事件

在进行极验验证码处理的过程中一定要进行失败重试的处理,因为我们很难做到百分百验证成功。

代码语言:javascript复制

登录完成处理

登录完成以后,我们保存cookies到本地,以供requests使用,具体使用方式请参看selenium requests进行cookies保存读取操作

代码语言:javascript复制

自动发布博客园随笔文章

登录完成保存了cookies我们就可以使用requests来发布博客园随笔文章了。这回又转到我们熟悉的请求分析啦。

  1. 打开chrome,登录博客园,打开我的博客
  1. 打开Charles,点击“新随笔”
  1. 添加随笔并发布

查看POST请求,form值中title、body还有两个__开头的变量,其他的都是固定值,找一下__VIEWSTATE/__VIEWSTATEGENERATOR的值

代码语言:javascript复制

将要发布的文章粘贴到.md文件中,因为博客园中使用的是Markdown编辑器,然后再传入文章主题执行即可

这几篇文章都是自动发布的哦,怎么样,还可以吧,哈哈。博客园的自动发布搞定了,还有其他的,以后就可以一键发布到其他网站再也不需要手动去搞啦

0 人点赞