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

本文介绍了如何使用Python解析和模拟滑动验证码的过程,通过分析B站登录页面的滑动验证码,利用selenium和图像处理技术,实现了一个接近人类操作的滑动验证解决方案。
摘要由CSDN通过智能技术生成

今天

要来说说滑动验证码了

大家应该都很熟悉

点击滑块然后移动到图片缺口进行验证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

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

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

也是可以使用这招搞定的

由于篇幅有限

源代码私信我

就可以获取啦

那,这次本篇就真的完啦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值