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

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

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

验证码收发

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

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

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

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

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

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

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

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

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

  • 注册读取短信的权限:在一个 Android App 中,读取短信是需要特定的权限的,所以我们需要在 Andriod App 的 AndroidManifest.xml 中将读取短信的权限配置好,比如接收短信的权限配置如下:
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
  • 注册广播事件:Android 有一个基本组件叫做 BroadcastReceiver,也就是广播接收者的意思,我们可以用它来监听来自系统的各种事件广播,比如系统电量不足的广播、系统来电的广播,当然系统收到短信的广播也就不在话下了。所以这就类似我们注册一个监听器,用来监听系统收到短信的事件。
    比如这里我们可以同样在 AndroidManifest.xml 里面注册一个 BroadcastReceiver,叫做 SmsReciver:
<receiver android:name=".receive.SmsReciver"><intent-filter android:priority="999"><action android:name="android.provider.Telephony.SMS_RECEIVED"/></intent-filter>
</receiver>
  • 实现短信广播接收:这里就需要我们真正实现短信接收的逻辑了,这里只需要实现一个 SmsReceiver 类来继承一个 BroadcastReceiver 然后实现其 onReceive 方法即可,其中 intent 参数里面便包含了我们想要的短信息内容,实现如下:
public class SmsReciver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = intent.getExtras();SmsMessage msg = null;if (null != bundle) {Object[] smsObj = (Object[]) bundle.get("pdus");for (Object object : smsObj) {msg = SmsMessage.createFromPdu((byte[]) object);Log.e("短信号码", "" + msg.getOriginatingAddress());Log.e("短信内容", "" + msg.getDisplayMessageBody());Log.e("短信时间", "" + msg.getTimestampMillis());}}}

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

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

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

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

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


架构图非常清晰,SmsForwarder 可以监听监听收到短信的事件,获取到短信的来源号码、接受卡槽、短信内容、接收时间等内容,然后将其通过一定的规则转发出去,支持转发到邮箱、微信群机器人、企业微信、Telegram 机器人、Webhook 等。

比如我们可以配置类似这样的规则,如图所示:


比如当手机号符合一定的规则就转发到 QQ 邮箱,比如内容包含 “报警” 就转发到阿里企业邮箱,比如内容开头是 “测试” 就发动给叫做 TSMS 的 Webhook。

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


我们也可以点击添加发送方按钮来添加对应的发送方,比如添加邮箱的发送方,我们可以设置 SMTP 配置下发件邮箱、SMTP 服务器、SMTP 端口、授权密码等内容:


设置 Webhook 我们可以选择是 GET 还是 POST 请求,然后填入对应的 URL、密钥等内容:


设置转发规则页面如图所示:


比如这里我们可以选择匹配卡槽、匹配的字段、匹配的模式,还可以配置正则来设置匹配的值,这里就配置了尾号是 4566 的手机号来执行一定的发送操作,收到的短信会发送到钉钉这个发送方。

实战演示

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

from flask import Flask, request, jsonify
from loguru import loggerapp = Flask(__name__)@app.route('/sms', methods=['POST'])
def receive():sms_content = request.form.get('content')logger.debug(f'received {sms_content}')# parse content and save to db or mqreturn jsonify(status='success')if __name__ == '__main__':app.run(debug=True)

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

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

python3 server.py

运行结果输出如下:

* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 269-657-055

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

ngrok http 5000

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

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

Session Status                online
Session Expires               1 hour, 59 minutes
Update                        update available (version 2.3.40, Ctrl-U to update)
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://1259539cb974.ngrok.io -> http://localhost:5000
Forwarding                    https://1259539cb974.ngrok.io -> http://localhost:5000                                                   Connections                   ttl     opn     rt1     rt5     p50     p90                                                              9       0       0.00    0.00    0.00    0.00

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

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


这里 Server 的地址我们就直接设置了刚才 Ngrok 提供的公网地址了,记得 URL 路径后面加上 sms。

接着我们添加一个转发规则:


这里我们设置了内容匹配规则,比如匹配到内容开头为测试的时候,那就将短信内容转发到 Webhook 这个发送方,即发送到我们刚刚搭建的 Flask 服务器上。

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

测试验证码593722,一分钟有效。

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

received +8617xxxxxxxx
测试验证码593722,一分钟有效。
SIM2_China Unicom_
2021-03-27 18:47:54
SM-G9860

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

批量收发

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

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

卡池

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

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


具体的技术这里不再阐述,详细可以自行查询相关的设备供应商。

接码平台

当然如上的方案成本还是比较高的,而且这些方案其实已经不限于简单接收短信验证码了,比如手机群控系统一般都会做手机群控爬虫,而卡池也可以用来做 4G/5G 蜂窝代理,如果仅仅做短信收发是可以的,但未免有些浪费了。

如果我们不想耗费过多成本想实现短信验证码的自动化,还有一种方案就是接码平台,其基本思路是这样的:

  • 平台会维护大量的手机号,并可能开放一些 API 或者提供网页供我们调用来获取手机号和查看短信的内容。
  • 我们调用 API 或者爬取网页获取手机号,然后在对应的站点输入该手机号来获取验证码。
  • 通过调用 API 或者爬取网页获取对应手机号短信的内容,并交由爬虫处理。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

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

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

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

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

  1. python短信验证码_玩转python之获取短信验证码

    原标题:玩转python之获取短信验证码 对于初学者,如何利用第三方python开发包发送短信验证码,下面是具体的实现和记录过程! 环境:虚拟机上centos7平台,python3.7版本: 第三方短 ...

  2. 爬虫之短信验证码自动化接收——Tasker

    1. Tasker是什么 Tasker是Android的一个应用程序,它 根据用户定义的配置文件或可点击或计时器主屏幕小部件中的上下文(应用程序,时间,日期,位置,事件,手势)执行任务(操作集).这个 ...

  3. python短信验证码登录_玩转python之获取短信验证码

    对于初学者,如何利用第三方python开发包发送短信验证码,下面是具体的实现和记录过程! 环境:虚拟机上centos7平台,python3.7版本: 第三方短信平台:榛子云短信(http://smso ...

  4. Python 网易云信(短信验证码) SDK

    Python SDK 网易云信(短信验证码) Golang SDK 网易云信(短信验证码) 网易云信官网地址 网易云信短信功能开通说明 官方短信验证码接口文档 环境依赖准备 pip install r ...

  5. python循环发送短信验证码_python发送短信验证码

    业务: 手机端点击发送验证码,请求发送到python端,由python调用第三方平台(我们使用的是榛子云短信http://smsow.zhenzikj.com)的短信接口,生成验证码并发送. 代码: ...

  6. python】爬虫:短信验证码的获取

    最近一直在琢磨写一个有点烦人的小爬虫,结果琢磨着,就花了一点点时间,写了这样一个"不友好"的,被许多人讨厌的爬虫

  7. python 爬虫 短信验证码

    在获得平台cookie的时候,发现很多平台都使用到了短信验证码来进行反扒,这种就挺抓头的,如果少量的账号还好,但是一旦账号较多,就很难受了,所以对于短信验证码的自动化获取就显得比较重要了,我来综述下我 ...

  8. python自动读取短信_自动化测试-自动获取手机短信验证码

    最近在做生产环境自动化测试,碰到一个难题就是短信验证码的获取,生产环境短信验证码是真实的,不能采用测试环境将短信验证码写成固定的方法解决,我的思路是:做一个apk小程序,将手机上的短信验证码实时读取出 ...

  9. python按照号段生成手机号接收验证码,「 python 」 python 实现短信验证码

    当我们在注册一个网页时,有的网页会让必须要短信验证.邮箱验证,才可以进行账号的注册.其实,我们在项目中会遇到很多问题,比如:当我们进行爬虫的时候,很容易由于网页的改版,造成我们事先写好的爬虫突然无效, ...

最新文章

  1. 后端说:只是你不懂怎么用 headers!
  2. 9款超赞的AI开源项目!| 本周Github精选
  3. 在区块链上表白——使用C#将一句话放入比特币的区块链上
  4. Python调用MongoDB使用心得
  5. noip提高组2000 乘积最大
  6. 悖论:早期互联网项目,是否需要技术含量?
  7. 详细整理Spring事务失效的具体场景及解决方案
  8. 递归实现回旋数组的小程序
  9. opencv美颜磨皮
  10. c语言sigaction,C语言中的Sigaction和setitimer
  11. 软件工程导论——第三章——需求分析
  12. mysql校验规则居民身份证号_身份证号规则及校验
  13. cleanmymac最新2023版 mac清理软件CleanMyMac X4.12.5 中文版功能介绍
  14. Unity接入高德SDK实现定位
  15. 嵌入式软件面试问题总结
  16. AutoCAD Electrical Essential Training AutoCAD Electrical Essential Training Lynda课程中文字幕
  17. 性能优化系列:每个程序员都应该知道的数字
  18. 屹立千年,只为你一个回眸
  19. 高建忠对哮病的认识和治疗
  20. 【MT7628】吉视传媒电视盒子连接路由器点播功能异常问题解决方案

热门文章

  1. windows 7 下,如何统计某文件夹下 视频总时长
  2. FastDFS监控中心安装
  3. java实现docx文档下载
  4. 14《游戏化思维》-豆瓣评分7.0
  5. CSS Core CSS hack CSS优化
  6. javaScript 上传图片(oss阿里云)
  7. android 语音识别文字
  8. 《逆袭大学——传给IT学子的正能量》目录
  9. 声学模型训练----Acoustic Modeling
  10. App 抓包利器:Charles