世纪难题,当Python爬虫遇到短信验证码如何处理?

验证码都有一种共同的特点,那就是这些验证码的处理流程通常只需要在 PC 上完成即可,比如图形验证码如果在 PC 上出现,那么在 PC 上直接验证通过就好了,所有的识别、验证输入的流程都是在 PC 上完成的。

但还有一种验证码和此种情况不同,那就是手机验证码,比如 PC 上需要输入手机 ,然后短信验证码需要发到手机上,然后再在 PC 上把收到的验证码输入即可通过验证。

那遇到这种情况,我们如何才能将这个流程给自动化呢p>

验证码收发

通常来说,我们的自动化脚本会运行在 PC 上,比如打开一个 页,然后模拟输入手机 ,然后点击获取验证码,接下来就需要输入验证码了。打开页面,输入手机 、点击获取验证码等流程我们可以非常容易地实现自动化,但是验证码被发送到手机上了,我们怎么能把它转到 PC 上呢p>

为了自动化整个验证码收发的流程,这时候我们想要完成的就是 —— 当手机收到一条短信的时候,它能够自动将短信转发到某处,比如一台远程服务器上或者直接发到 PC 上,在 PC 上我们可以通过一些方法再把短信获取下来并提取验证码的内容,然后自动化填充验证码即可。

那这里关键的部分其实就是怎样完成这两个步骤:

  • 如何监听手机收到了短信
  • 如何将手机短信转发到想要的位置

这两个步骤缺一不可,而且都需要在手机上完成。

解决思路自然很简单了,我们以 Android 手机为例,如果有 Android 开发经验的话,其实这两个功能实现起来还是蛮简单的。

注意:这里我们仅仅简单介绍基本的思路,不会完全详细展开介绍具体的代码实现,感兴趣的话可以自行尝试。

首先如何监听手机收到了短信呢p>

在 Android 开发中,整体就分为三个必要环节:

  • 注册读取短信的权限:在一个 Android App 中,读取短信是需要特定的权限的,所以我们需要在 Andriod App 的 AndroidManifest.xml 中将读取短信的权限配置好,比如接收短信的权限配置如下:
  • 注册广播事件:Android 有一个基本组件叫做 BroadcastReceiver,也就是广播接收者的意思,我们可以用它来监听来自系统的各种事件广播,比如系统电量不足的广播、系统来电的广播,当然系统收到短信的广播也就不在话下了。所以这就类似我们注册一个监听器,用来监听系统收到短信的事件。
    比如这里我们可以同样在 AndroidManifest.xml 里面注册一个 BroadcastReceiver,叫做 SmsReciver:
  • 实现短信广播接收:这里就需要我们真正实现短信接收的逻辑了,这里只需要实现一个 SmsReceiver 类来继承一个 BroadcastReceiver 然后实现其 onReceive 方法即可,其中 intent 参数里面便包含了我们想要的短信息内容,实现如下:

如此一来,我们便实现了短信的接收。

短信收到之后,发送自然也就很简单了,比如服务器提供一个 API,我们通过请求该 API 即可实现数据的发送,这个通过 Android 的一些 HTTP 请求库就可以实现,比如 OkHttp 等构造一个 HTTP 请求即可,这里就不再赘述了。

不过总的来说,整个流程下来其实还需要花费一些开发成本的,对于如此常用的功能,有没有现成的解决方案呢是有的。我们可以借助于于一些开源实现,我们就没必要重复造轮子了。

这里我们就介绍一个开源软件,叫做 SmsForwarder,中文翻译过来叫做短信转发器,其 GitHub 仓库地址为:
https://github.com/pppscn/SmsForwarder。

它的基本流程架构图如下:

其中 QQ 邮箱、阿里企业邮箱都是我们已经配置好的发送方,都属于邮箱类型,TSMS 也是一种发送方,属于 Webhook 类型,如图所示:

实战演示

比如这里我们来尝试下,这里我们用 Flask 写一个 API,实现如下:

代码很简单,这里设置了一个路由,接收 POST 请求,然后读取了 Request 表单的内容,其中 content 就是短信的详情内容,然后将其打印出来。

我们将代码保存为 server.py,然后将其运行起来:

运行结果输出如下:

为了方便测试,我们可以用 Ngrok 将该服务暴露到公 :

注意:Ngrok
可以方便地将任何非公 的服务暴露到公 访问,并配置特定的临时二级域名,但一个域名有时长限制,所以通常仅供测试使用。试用前请先安装
Ngrok,具体可以参考 https://ngrok.com/。

运行之后,可以看到输入结果如下:

这里我们可以看到 Ngrok 为我们配置了一个公 地址,比如访问
https://1259539cb974.ngrok.io 即相当于访问了我们本地的 http://localhost:5000 服务,这样手机上只需要配置这个地址即可将数据发送到 PC 了。

接下来我们手机上打开 SmsForder,添加一个 Webhook 类型的发送方,配置如下:

OK,配置完成之后,然后我们给该手机尝试发送一个验证码,内容如下:

这时候就可以发现刚才的 Flask 服务器接收结果是这样的:

可以看到刚才验证码的内容就成功由手机发送到 PC 了,接着我们便可以对此消息进行解析和处理,然后存入数据库或者消息队列即可。爬虫一端监听消息队列或者数据库改动即可将其填写并进行一些模拟登录操作了,该步骤就不再赘述了。

批量收发

当然以上只针对于一部手机的情况,如果我们有大量的手机和手机卡,我们可以实现手机的群控处理,比如统一安装短信接收软件,统一配置相同的转发规则,从而实现大量手机 验证码的接收和处理。

比如一个群控系统就是这样的:

卡池

当然还有更专业的解决方案,比如有专业的手机卡池,配合以专业的软件设备实现短信的监听。

比如如下的设备支持插 128 张 SIM 卡,就可以实现同时监听 128 个手机 的验证码,如图所示:

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树 络爬虫验证码处理214465 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年2月22日
下一篇 2022年2月22日

相关推荐