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

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

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

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

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

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

截图处理

这是弹出框显示的图片

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

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

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

得到x、y坐标和大小

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

图片分析

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

移动处理

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

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

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

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

登录完成处理

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

自动发布博客园随笔文章

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

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

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

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

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

原文发布于微信公众号 - python爬虫实战之路(gh_f26a568fdea8)

原文发表时间:2018-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据互联网思维

如何利用迅捷画图绘制工作流程图

迅捷画图可以绘制流程图,思维导图并且能制作的很精美出来,那怎样利用迅捷画图绘制工作流程图呢?下面是小编辑总结的操作方法,可以参考步骤进行操作使用。

27740
来自专栏小狼的世界

VIM在多窗口编辑时的几个快捷键

使用VI提供的多窗口编辑在项目文件比较多的情况下非常方便。今天总结了几个比较好用的快捷键。

8310
来自专栏破晓之歌

AI-icon制作 原

9250
来自专栏禁心尽力

快速完成(图片旋转,查看原图)

一个小小的前端需求送给大家,使用js实现图片旋转,并且点击图片能够实现规定格式的大图。   主要使用的是jQuery的delegate()方法实现图片旋转,该...

40780
来自专栏Python小屋

使用Python+tkinter编写电脑桌面放大镜程序

代码思路:首先全屏截图,然后在鼠标当前位置以小窗口进行二次截图,放大后再显示到鼠标左上角。 主要技术:全屏截图,指定区域截图,绑定鼠标事件,绘制图像。 ? 建议...

32350
来自专栏自由而无用的灵魂的碎碎念

Fedora 13桌面管理的新发现

如果有很多程序同时开着,你如果快速找到所需要的窗口呢?怎么就能都快速预览,然后找到所要的窗口呢?

11010
来自专栏DannyHoo的专栏

iOS中将图片保存到自定义相册中

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

28820
来自专栏听雨堂

CSS实现按钮的两张图片的同步出现

      通过图片交换实现了按钮图片,但是存在一个问题,老是先加载一个图片,另外一个却加载得慢,效果反而不好。这是网上的解决方法,实现css图片的预加载: <...

22190
来自专栏互联网杂技

一些好用的jquery技巧

1、返回顶部按钮 通过使用jQuery中的animate 和scrollTop 方法,不用插件就可以创建一个滚动到顶部的简单动画: // Back to to...

34560
来自专栏ytkah

通过图片定位给一张图片添加多个链接

  我们在建站的时候使用图片素材能为整个网站增色不少,但是太多的边框按钮图片会增加请求次数,从而降低网站加载速度,这时我们可以考虑将多个小图片元素集合到一张图片...

28030

扫码关注云+社区

领取腾讯云代金券