论如何破解腾讯滑块验证码

简介: 论如何破解腾讯滑块验证码

title: 论如何破解腾讯滑块验证码
date: 2020-04-10 21:19:57.0
updated: 2020-09-27 21:55:33.0
url: https://www.ufec.cn/archives/4.html
thumbnail: https://ghproxy.com/https://raw.githubusercontent.com/ufec/picGoImg/main/blog/2020/04/timg-97d283f09f9f4ddc896ea6ea715b2380.webp
categories:

  • 代码

tags:

  • Python
  • 爬虫开发

实现缘由

学校要求每天要提交个什么健康信息收集表,交就交,每天数据没啥变化,这腾讯文档还不能保存选择(就算状况有变,个人基本信息不会变,非得要重新填,小程序里历史记录点一下页面就会重新置顶,又得拉下去填,真的烦),于是这个小项目就诞生了

实现思路

  1. Python 模拟登陆
  2. 获取 cookie
  3. 构造发送数据
  4. 接口发送数据
  5. 创建定时器,定时执行

遇到问题

1、腾讯滑块验证码的问题,腾讯滑块验证码应该是有过一次更新机制,看到网上帖子,是说获取原图与有验证图作比较,得出具体位置,现在的验证码没有原图,只有滑块和缺陷图,上述方法也就失效了
1.webp
经过爬贴后,看到一个方法,对缺陷图中的轮廓进行提取,据说可在 95%以上,但这也有个问题,如上图所示,如果直接截图拼图区域(280*161),进行识别,就不会成功,猜测是像素不够,获取图片链接,下载原图(680*390)就可以识别;接下来算出比例、滑块图初始位置,比较计算即可算出滑块需要移动的距离。正当对滑块图初始位置无从下手之时,F12 得到了答案
2.webp
经过不断刷新(穷举所有图片),发现所有初始值均为 22px,这就简单多了,另外轮廓距最左端距离比例大概是 0.43
那么距离就是 x(原图轮廓距左端距离)*0.43-22 即可,而且腾讯这个没有速度检测机制,不需要考虑模拟人工,0.1s 都是可以的,为了保险起见,建议放慢

2、运行期间部分报错
使用定时器时后,报了一个如下错误

出自博客园: https://www.cnblogs.com/ALXPS/p/10193296.html
RuntimeError: There is no current event loop in thread

查找资料得知,asyncio(协程)程序中的每个线程都有自己的事件循环,但它只会在主线程中为你自动创建一个事件循环。所以如果你 asyncio.get_event_loop 在主线程中调用一次,它将自动创建一个循环对象并将其设置为默认值,但是如果你在一个子线程中再次调用它,你会得到这个错误。相反,您需要在线程启动时显式创建/设置事件循环:

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

使用 pyppeteer 时候,报了一个类似如下的错误:

出自 stackoverflow: https://url.cn/5ReagPN
handler = _signal.signal(_enum_to_int(signalnum),_enum_to_int(handler))
ValueError: signal only works in main thread.

需要在禁用信号处理的情况下调用启动,实例 browser 对象时,增加如下参数:

'handleSIGINT' : False,
'handleSIGTERM' : False,
'handleSIGHUP' : False

lib 库缺失类错误:
libXtst 库

error while loading shared libraries: libXtst.so.6: cannot open shared object file: No such file or directory
yum list available | grep libXtst #查找对应版本
yum install libXtst.i686 #一般不用选devel这种版本的即可

libXss

error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

解决方案

yum install libXss #我装这一个好像还不行,
sudo dnf install libXScrnSaver #这两个都装就可以了

libasound

error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory

解决方案

sudo yum install alsa-lib

libatk-bridge

error while loading shared libraries: libatk-bridge-2.0.so.0: cannot open shared object file: No such file or directory

解决方案

yum install at-spi2-atk -y

libgtk-3

error while loading shared libraries: libgtk-3.so.0: cannot open shared object file: No such file or directory

解决方案

yum install gtk3

通用解决方案:https://pkgs.org/download/ + 缺失 lib 库名,如:
https://pkgs.org/download/libatk-bridge-2.0.so.0
选择对应操作系统即可

识别代码

def get_pos(imgpath):
    image = cv.imread(imgpath)
    blurred = cv.GaussianBlur(image, (5, 5), 0)
    canny = cv.Canny(blurred, 200, 400)
    contours, hierarchy = cv.findContours(canny, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
    for i, contour in enumerate(contours):
        M = cv.moments(contour)
        if M['m00'] == 0:
            cx = cy = 0
        else:
            cx, cy = M['m10'] / M['m00'], M['m01'] / M['m00']
        if 6000 < cv.contourArea(contour) < 8000 and 370 < cv.arcLength(contour, True) < 390:
            if cx < 400:
                continue
            x, y, w, h = cv.boundingRect(contour)  # 外接矩形
            cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
            return x
    return 0

写在结尾

其他的基本也就没啥了,主要没找到具体的识别代码,有需要的可以参考,其他问题基本百度都有,CSDN、博客园、思否等等多看看。学习爬虫可以看看崔庆才的爬虫教学
QQ图片20200410212544.webp
查看《52 讲轻松搞定网络爬虫》目录

目录
相关文章
|
算法 前端开发 JavaScript
滑块验证码------啥?你居然还在手动滑动,你不来试试自动滑动吗
滑块验证码------啥?你居然还在手动滑动,你不来试试自动滑动吗
897 0
|
前端开发 测试技术 Go
autojs滑块验证码-查找位置(二)
牙叔教程 简单易懂
3196 0
|
6月前
|
机器学习/深度学习 数据采集 API
Python自动化解决滑块验证码的最佳实践
Python自动化解决滑块验证码的最佳实践
|
人工智能 文字识别 安全
温习数据算法—js滑块验证码
温习数据算法—js滑块验证码
|
数据采集 JavaScript 前端开发
使用Java解决快手滑块验证码
使用Java解决快手滑块验证码
|
安全 PHP 开发工具
注册登录首选,趣味滑块验证码
注册登录账户时,保障账户安全是首要任务!使用趣味滑块验证码,既能有效防御恶意攻击,又能为验证过程增添一丝乐趣。让注册和登录变得更加有趣又安全!
|
缓存 JavaScript 数据安全/隐私保护
Crack Captcha | 某招投标信息查询网站滑块验证码分析
Crack Captcha | 某招投标信息查询网站滑块验证码分析
194 0
|
JavaScript 前端开发
【JavaScript】滑块验证码
【JavaScript】滑块验证码
291 0
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
8月前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
1321 5