python网页登录验证码不显示_进网页需要验证码?不好意思,Python从来不惧各种验证码!...

今天

要来说说滑动验证码了

大家应该都很熟悉

点击滑块然后移动到图片缺口进行验证067527b4f7abfb4f7d0f28f02a665f08.png

现在越来越多的网站使用这样的验证方式

为的是增加验证码识别的难度7e1a0e86b4cfa2c69d514975648d4ee9.png

那么,对于这种验证码应该怎么破呢

接下来就是见证神奇的时刻df2ffaf2bc4f41b820959d6fe6632579.png

打开 b 站的登录页面

可以看到登录的时候需要进行滑块验证

按下 F12,进入 Network,看下我们将滑块移到缺口松开之后做了什么提交70f7cf6b4727c9f50dad96e23ac04b91.png

可以看到是一个 GET 请求

但是这请求链接也太特么长了吧

就是比小编短了一点点7f65485fc29f93c77d55b448ff286537.png

我们来看看请求的参数是怎么样的65abcd6e13a9b51e9145cc32942cecdf.png

哇靠,gt ?challenge?w?

这些都是什么鬼参数,还加密了,完全下不了手啊be2e358009259e932e4e650935e47772.png

那么

本篇完

再见

peace

你是不是迷恋我??1c32119b31fc86fa6879d7e406f49331.png

好吧

你居然滑到这里来了

说明你还是有点爱我的

我是那种遇到一点困难就放弃的人吗

显然不是

那么接下来才是真的学习 python 的正确姿势df2ffaf2bc4f41b820959d6fe6632579.png

既然以请求的方式不好弄,我们从它们的源代码入手,看看有什么突破口。0e21638dc1a96b63b8d1dc7e34e610f6.gif

回到 b 站的登录页,按下 F12,进入 Element

然后点击滑块出现了图片,定位一下5cc1537bb1ee88877f12a816796a502e.png

发现有两个 a 标签

一个 class 是 gt_bg gt_show

一个 class 是 gt_fullbg gt_show

和小帅b想的一样

这个验证码应该是有两张图片

一张是完全的背景图片

一张是缺口的图片

那把这两张图片下载下来对比一下不就行了

打开 a 标签一看6eeeb92d4a2ca3d38035b49c3178c298.png

哇靠

一张图片被切割成很多小块

原来这张图片是拼出来的

我们看看原始图片是怎么样的

什么乱七八糟的

再仔细看下源代码

原来是在同一张图片通过偏移量合成了一张完整的图片

background-position: -277px -58px;

厉害厉害

小编我看了一下缺口的图片也是如此8cc0f885c012daea3d5396a86c5a0615.png

到这里

我们的第一个思路就是

下载这两张原始图片

然后通过偏移量合成两张真正的图片

背景图

88a2b650dca2dbcf3468b2cb546bd28e.png

↓变身a86a083f7b761ed46afb6f9a08070bc7.png

缺口图f9999fa5832879ffe241e9c1bd1ccedc.png

↓变身

06a98372fbc346ebe5a7893b0da3d95b.png

那么怎么做呢?

因为我们还要模拟滑动滑块

所以呢

我们要用到 selenium

打开b站的登录页

然后等到那个滑块显示出来

57be18bfeb45b17b78ec3406ce4bc977.png

接下来我们就获取页面的源码

driver.page_source

然后使用 bs 获取两张原始背景图片的 url

eafe5498908e84e62f9a49332a407f21.png

拿到了图片地址之后

将图片下载下来

c20ed6e544efbe0c1155f6777452bdd6.png

ok6e14424cb36dfb5cf6f17e599d6d1db8.png

0cffadf0c3773109f7389e41c4c04ff1.png

我们已经把两张原始图片下载下来了ed4cb679595b94c0f2987c9eb9f76a08.gif

那么接下来就是要合成图片了

我们要根据图片的位置来合成

也就是源码中的 background-position966fa94b1956947b39b77aded7069624.png

获取每一个小图片的位置

我们可以通过字典的形式来表示这些位置

然后将数据放到列表中

807ff64cfa4055fb5f5c4974a8dbdde2.png

那么

现在我们已经有了原始图片

还知道了每个位置应该显示原始图片的什么部分

接下来我们就写一个方法

用来合成图片

4fc1ddc4ee9f90163fc971e7bc99d16c.png

那么问题又来了

怎么合成啊

我们再看看一开始分析的图片d6f6161df70c92af8633147b63af4ed9.png

这里图片被分割成的每一个小图片的尺寸是

10 * 58

所以我们也要将我们刚刚下载的原始图片切割成相应的尺寸大小

而且

这张图片是由上半部分的小图片和下半部分的小图片合成的

所以我们定义两个 list 来装这些小图片

3926572da32a243336d5cb297bdad097.png

然后将原始的图片切割好放进去

539f7b3a1255193779d9223f5e6cf47f.png

至此

我们这两个 list 就分别放好了各个切割的图片了

那么接下来就创建一张空白的图片

然后将小图片一张一张(间距为10)的粘贴到空白图片里

这样我们就可以得到一张合成好的图片了

我真是个天才e290b373ca7b71d3016a0e19d657d8e2.png

78cf2ca44257a0413a4bf723e16e824e.png

那么到现在

我们可以得到网页上显示的那两张图片了

一张完全的图片8f8bd304048233c6c3c09407d4e45081.png

一张带缺口的图片3d378acc5831ee2e001167c2ce07ddb7.png

接下来我们就要通过对比这两张图

看看我们要滑动的距离是多远

e9475b3907e39a38cc1b491484323e7e.png

可以通过图片的 RGB 来计算

我们设定一个阈值

如果 r、g、b 大于这个阈值

我们就返回距离

88db42995b351f0da43f27ff15da489c.png

现在

我们知道了关键的滑动距离了

激动人心的时刻到了

我们使用 selenium

拿到滑块的元素

然后根据这个距离拖动到缺口位置不就好了么

马上打开 selenium 的文档

看到了这个函数485fb991cbca9f2e4d383706e4083d0e.png

它可以使用左键点击元素

然后拖动到指定距离

最后释放鼠标左键

挖槽

正合我意

赶紧试一下

4d268a03cf8dd77d8e42c87272ce733d.png

运行一下试试看吧ca353766f86523d79f1aa85c961b835c.gif

哇哦你妹哦~

妖怪吃了拼图了985a113f1809a6ee290b0f17d7b6a987.png

看来直接拖拽是不行的

容易遇到妖怪

毕竟这太快了

就算加藤鹰也没那么快吧

我试着拖完滑块让它睡一下再释放

894b42da5559a7f186d40de1d2f494ad.png

发现拼图还是特么的被妖怪吃了23395ee6f21925e67a8e787d08c8da95.png

后来发现原来别人也遇到了这样的问题

然后又发现了

有个叫匀速直线运动的东西

什么 加速度

什么 v = v0 + at

什么 s = ½at²

这不是高中的知识点么

瞬间想起高中的时候在最角落的课桌

此刻往右上方抬起头

45 度角

让我的眼泪划出一条美丽的弧线43feab78379767d127cb61d40c8ffece.png

什么鬼

回到正题

我们可以使用它来构造一个运动路径

该加速时加速

该减速的时候减速

这样的话就更像人类在滑动滑块了

dcfa93df4bc62ec0a6e84184731067f9.png

这次

我们使用这个轨迹来滑动

d64095b6c4d769df528d649705a4b75a.png

好了好了

我们再来运行一下吧4b6e4d7d956ffe784a8651e353d47af5.gif

哈哈哈

cool

成功识别了哇

我不管2cc536a20aebbd6a0b4bef0e96dfca3b.png

当然了

成功率不是 100%

可以多调戏它几次

ok

以上就是识别滑动验证码的具体过程了

对于其它大部分的滑动验证码

也是可以使用这招搞定的

由于篇幅有限

源代码私信我

就可以获取啦

那,这次本篇就真的完啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么调用新建模型里文章的内容_优雅地进行Tensorflow Lite模型转换

初涉知乎江湖,知道大佬很多,请温柔以待!!!七日凌晨,谷歌连夜发布了有关于Tensorflow最新成果和技术,这应该是贾扬清离开脸书后另一个深度学习界令人惊呼的事件了吧!(旁白…

git add后取消_Git常用命令-总结

创建git用户$ git config --global user.name "Your Name"$ git config --global user.email "emailexample.com"初始化一个Git仓库,使用git init命令。添加文件到Git仓库,分两步:使用命令git add ,注意&…

查看csv编码_[小O地图-数据] - 坐标转地址文字(逆地理编码)

小O地图是一款基于互联网地图进行地理数据处理、分析、图表的软件。致力为广大科研人员提供专业地图数据,用于科研及学习。小O地图提供将【经纬度坐标转换为地址】的功能,例如:将“116.359861, 39.917225” 转换为 “北京市西城区…

python自动化办公源码_python自动化办公:文件篇(自动整理文件,一键完成)

import os list_all[]#初始化一个空列表 for root ,dirs,files in os.walk(rC:UsersShineionDesktop新建文件夹): for name in files: file_pathos.path.join(root,name)#包含路径的文件 file_nameos.path.split(file_path)[-1] list_all.append(file_name) print(list_all)如果…

ocr中文数据集_CNOCR:测试集准确率最高98%,自带识别模型的中文OCR包

今天 Gitee 为大家介绍的是一款中文 OCR 包。大家都知道,训练模型是一件非常费时费力的事情,但今天这款项目已经自带训练好的识别模型,我们只需要下载下来使用即可,可以说是非常方便了,那么下面我们就去看看这个项目的…

sha算法源代码java_SHA算法Java实现

一 简介安全散列算法固定长度摘要信息二 SHA算法SHA-1、SHA-2(SHA-224、SHA-256、SHA384、SHA-512)三 SHA算法实现package com.imooc.security.sha; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Security; impo…

arraylist remove() java_执行ArrayList的remove(object)方法抛异常?

简介或许有很多小伙伴都尝试过如下的代码:然后会发现抛出java.util.ConcurrentModificationException异常,这是一个并发异常。那么这个到底是什么情况?首先需要介绍一下增强for循环增强for循环增强for循环是Java1.5后,Collection实…

centos gdb调试_gdb-miss-debuginfo

使用gdb调试core时候,提示Missing separate debuginfos的解决办法。错误提示错误提示信息如下:Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.el7_2.8.x86_64 libaio-0.3.109-13.el7.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc-4…

怎么判断自己启动的线程是否执行完成 java_多线程?怎么用?

Java线程:概念与原理操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中&…

mysql设置中文_Flask中MySQL预热

Flask和MySQL导读现在Flask已经学习到了类视图,它其实是这样一个关系FLask高级视图视图函数app.route\add_url_rule类视图蓝图blueprint(这个接下来要讲)结束蓝图后,接着就是Flask数据库的结合SQLAlchemy.在学习SQLAlchemy之前,希望和大家一起了解学习一下mysql这篇文章不涉及理…

html首行缩进2字符怎么设置_Word如何设置首行缩进2字符

在使用Word编写书籍或者文稿时,我们都会有个习惯将每个段落前面空两个字符,这样可以很好的方便读者阅读时分辨段落。有的人习惯用几个空格来代替,有的人习惯用空白字符V1来代替(像Word联盟网站上的每篇教程就是用V1来标记段落的)。其实在Word…

java 面试什么是类_Java 面试题代码类收集

long temp(int)3.9;System.out.println(temp);temp%2;System.out.println(temp);31View CodeJava里面类的方法名可以与类名一样,与构造函数的区别是方法有返回值,构造函数没有。public classUserInfo {publicUserInfo(){}publicString UserInfo(){return…

idea jdk配置_在IDEA中DEBUG Javac源码

背景在做JSR269的深度解析的时候,需要对javac的源代码进行单步调试并跟踪。因此在这里记录下具体的调试步骤。调试环境:OS: MacOS 10.14.5JDK:JDK_1.8IDEA: IntelliJ IDEA 2019.1.3下载Javac源码可以直接用JDK的github镜像仓库处下载&#xf…

jar中没有主清单属性_还在因 JDK 兼容问题发不同 JAR 包做兼容?MRJAR 了解一下?...

背景Java 9 版本中增强了Jar 包多版本字节码文件格式支持,也就是说在同一个 Jar 包中我们可以包含多个 Java 版本的 class 文件,这样就能做到 Jar 包升级到新的 Java 版本(新特性 API 使用)时不用强迫使用方为了使用新 Jar 包而升级自己的业务模块 Java …

java代码例子_程序员快速弄清Java异常体系,拒绝痛苦编程,开发效率加倍

知己知彼方能百战不殆,在小编初学Java时候特别怕程序报异常,经常会因为异常不知所措,相信这个问题应该是所有 初学者都会有的心理感受;如果你也有这种感受,那么只有一种解决方法: 迎难而上,攻克Java异常体系,长痛不如短痛,只要清楚了Java的异常体系,就不会再有这种感受了。下面…

java多条件判断_Java基础教程,第七讲,条件控制、循环语句、数组

学完此次课程,我能做什么?学完此次课程我们将掌握Java中的条件判断和多种循环语句,并且掌握数组的定义和初始化,以及几个常用的数组函数。学习此次课程,需要多久?10分钟课程内容和其他语言一样Java使用条件…

qq机器人源码_基于Springcloud+vue+oAuth2.0全家桶模拟商城项目源码分享

项目介绍功能点:模拟商城,完整的购物流程、后端运营平台对前端业务的支撑,和对项目的运维,有各项的监控指标和运维指标。技术点:核心技术为springcloudvue两个全家桶实现,采取了取自开源用于开源的目标&…

java静态页面我都做不出_Java高并发:静态页面生成方案

提升网站性能的方式有很多,例如有效的使用缓存,生成静态页面等等。今天要说的就是生成静态页面的方式。这个也是我近期一直在搞的一个问题,近期在做使用html servlet做个人网站,为什么是这2个东西呢?1、直接用servlet…

js sleep函数_简单而面试中又常见的知识点:JS执行机制

在开始讲解之前,我们先来看一段代码:console各位小伙伴觉得上面的结果输出会是多少呢?如果你没有了解过javascript的执行机制的话,上面的题目可能会让你崩溃。不过别着急,先往下看,我保证你看到最后&#x…

护卫神怎么增加php版本_护卫神php套件 php版本升级方法(php5.5.24)

最近小编开始学习研究win2008 r2的php环境配置,发现护卫神的php套件非常好用,安装简单,但是因为php版本不是最新的版本,所以就想将php升级下,因为新版的php修复了一些bug所以这里就分享下方法,需要的朋友可…