前一段时间想尝试一下用 Python 实现自动发一些文章到头条上,因为头条没有提供API发布文章,所以只能通过一些浏览器自动化,实现自动发布文章。但是第一道坎就是登录账号的时候弹出来的滑块验证码。
相信大家对滑块验证码比较熟悉了,就是一张有缺口的背景图,和一张缺口的图片,通过拖拽使背景图和前景图拼接成一张完整的图片。
查找了网上很多文章,基本上滑块验证码实现的方式与头条的并不一样,所以也不能成为解决方案。在 GitHub 搜索「滑块验证码」指定 Python 语言后发现了头条的字样,于是阅读了一遍代码,了解了实现原理。
核心代码分为两个步骤,一是计算需要滑动的距离,二是模拟出人手操作滑动的速度,因为匀速滑动会被认为是机器,不允许通过验证。
计算滑动距离
这里利用了 opencv-python 这个库提供的 matchTemplate 方法,从一张大图中搜索小图,计算出大图上各个区域和小图的相识度,再通过 minMaxLoc 方法找到最大值。从而计算需要滑动的距离。具体代码如下
# 传入滑块背景图片本地路径和滑块本地路径,返回滑块到缺口的距离def findPic(img_bg_path, img_slider_path): """ 找出图像中最佳匹配位置 :param img_bg_path: 滑块背景图本地路径 :param img_slider_path: 滑块图片本地路径 :return: 返回最差匹配、最佳匹配对应的x坐标 """ # 读取滑块背景图片,参数是图片路径,OpenCV默认使用BGR模式 # cv.imread()是 image read的简写 # img_bg 是一个numpy库ndarray数组对象 img_bg