Python爬虫验证码识别——手机验证码的自动化处理

简介: Python爬虫验证码识别——手机验证码的自动化处理

手机验证码的自动化处理
有一种验证码就是手机验证码,如果在PC上出现了一个手机验证码,需要先在PC上输入手机号,然后把短信验证码发到手机上,再在PC上输入收到的验证码,才能通过验证。

遇到这样的情况,如何才能将识别流程自动化呢?

短信验证码的收发
通常,我们的自动化脚本运行在PC上,例如打开一个网页,然后模拟输入手机号,点击获取验证码,接下来就需要输入验证码了。前三个流程自动化很容易,但验证码发送到手机上了,怎么把它转给PC呢?

自动化验证码的整个收发流程,可以这么实现——当手机接收到一条短信时,自动将这条短信转发至某处,例如转发至一台远程服务器或者直接发给PC,在PC上我们可以通过一些方法获取短信内容并提取验证码,再自动化填充到输入的地方即可。
关键步骤是如下两步:

  1. 监听手机收到短信的事件
  2. 将短信内容转发至指定的位置

这两步缺一不可,而且都需要再手机上完成。思路其实简单,以Android手机为例,如果有Android开发经验,这两个功能实现起来很简单的。

  1. 首先如何监听手机接收到的短信呢?在Android开发中,分为三个必要环节。

  2. 注册读取短信的权限:在一个Android App中,读取短信需要具备特定的权限,所以需要在

    Android App的AndroidManifest.xml文件中将读取短信的权限配置好,例如:
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
    

注册广播事件:Android有一个基本组件叫BroadcastReceiver,是广播接收者的意思,可以用它来监听来自系统的各种事件广播,例如系统电量不足的广播、系统来电的广播,那系统接收到短信的广播自然也不在话下。这类似于注册一个监听器来监听系统接收到短信的事件。这里我们在AndroidManifest.xml文件中注册一个BroadcastReceiver,叫做Sm```js
sReceiver:







**实现短信广播的接收:**这里就需要真正实现短信接收的逻辑了,只需要实现一个SmsReceiver类,它继承了BroadcastReceiver类,然后实现其onReceive方法即可,其中intent参数里就包含了我们想要的短信内容,实现如下:
```js
public class SmsReceiver extents BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent){
        Bundle bundle = intent.getExtras();
        SmsMessage msg = null;
        if (null !=bundle){
            Object[] smsObj = (Object[]) bundle.get("pdus");
                msg = SmsMessage.createFromPdu((bytep[]) object);
                Log.e("短信号码","" + msg.getOriginationAddress());
                Log.e("短信内容","" + msg.getDisplayMessageBody());
                Log.e("短信时间","" + msg.getTimestampMillis());
                }
            }
        }

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

收到短信之后,发送自然也很简单了,例如服务器提供一个API, 请求该API即可实现数据的发送,Android的一些HTTP请求库就可以实现这个逻辑,例如利用OkHttp构造一个HTTP请求。

有没有现成的解决方案呢?当然,完全可以借助一些开源实现。一个开源软件SmsForwarder,中文叫做短信转发器,其GitHub地址为https://github.com/pppscn/SmsForwarder。它的基本框架如图所示:

image.png

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

a.实战演示
使用Flask写一个API, 代码如下:

from flask import Flask, request, jsonify
from loguru import logger

app = Flask(__name__)

@app.route('/sms', methods=['POST'])
def receive():
    sms_content = request.form.get('content')
    logger.debug(f'received {sms_content}')
    return jsonify(status='success')

if __name__ == '__main__':
    app.run(debug=True)

设置一个路由,接收POST请求,然后读取了Request表单的内容,其中content就是短信内容的详情,之后将其打印出来。运行结果如下:

* Serving Flask app 'server'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on <http://127.0.0.1:5000>
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 134-109-800

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

ngrok http 5000

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

Session Status                online                                            
Account                       lxw1973 (Plan: Free)                              
Version                       3.8.0                                             
Region                        Japan (jp)                                        
Latency                       109ms                                             
Web Interface                 <http://127.0.0.1:4040>                             
Forwarding                    <https://ecb6-122-143-163-242.ngrok-free.app> -> htt

Connections                   ttl     opn     rt1     rt5     p50     p90       
                              0       0       0.00    0.00    0.00    0.00

可以看到Ngrok为我们配置了一个公网地址,例如访问https://ecb6-122-143-163-242.ngrok-free.app就相当于访问我们本地的http://localhost:5000服务,这样只需在手机上配置这个地址就可以将数据发送到PC端了。

接下来我们手机上打开SmsForder,添加一个Webhook类型的发送方,设置详情如图所示:

image.png

其中,我们把WebServer的URL直接设置成刚才Ngrok提供的公网地址,注意要在URL的后面加上sms。接着我们添加一个转发规则。如下图所示:
image.png

这里我们设置了内容匹配规则,将短信转发到Webhook这个发送方,即发送到我们刚刚搭建的Flask服务器上。添加完成后,可以尝试用另一台手机给当前运行次App的手机发送一个验证码信息,内容如下:

测试验证码65272752,一分钟有效

这时可以发现刚才的Flask服务器接收到了这样的结果,如图所示:
image.png

可以看到,发送给手机的验证码信息已经成功由手机发送到PC了,接着便可以对此信息进行解析和处理,然后存入数据库或消息队列。

a.批量收发
如果有大量手机和手机卡,则可以实现手机的群控处理,例如统一安装短信接收软件、统一配置相同的转发规则,从而接收和处理大量手机号的验证码。如图所示就是一个群控系统:

image.png

b.卡池、猫池
除了上面的方法,当然还有更专业的解决方案,例如用专业的手机卡池、猫池,配以专业的软件设备实现短信监听。如下图所示的设备支持插128张SIM卡,可以同时监听128个手机号的验证码。
image.png

c.接码平台
卡池、猫池的解决方案成本还是比较高的,而且这些方案其实已经不限于简单接收短信验证码了,就像手机群控系统一般会做手机群控爬虫,卡池也可以用来做4G/5G蜂窝代理,仅仅走短信收发当然也可以,未免有些浪费了。如果不想耗费过多成本,想实现短信验证码的自动化,还有一种方案就是接码平台,其基本思路如下:

  • 平台会维护大量手机号,并可能开放一些API或提供网页供我们调用来获取手机号和查看短信的内容。
  • 我们调用API或者爬取网页获取手机号,然后在对应的网站输入该手机号来获取验证码。
  • 通过调用API或者爬取网页获取对应手机号的短信内容,并交由爬虫处理。
相关文章
|
29天前
|
搜索推荐 Python
使用Python自动化生成物业通知单
本文介绍如何使用Python结合Pandas和python-docx库自动化生成物业通知单。通过读取Excel数据并填充至Word模板,实现高效准确的通知单批量制作。包括环境准备、代码解析及效果展示,适用于物业管理场景。
62 14
|
7天前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
106 60
|
8天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
9天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
18天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
19天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
51 7
|
23天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
1月前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
1月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
35 4
|
1月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!