app中阿里云滑动验证码和抓取代码解耦的一些尝试

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了app中阿里云滑动验证码和抓取代码解耦的一些尝试相关的知识,希望对你有一定的参考价值。

考虑这样一个场景,当你在app端提交订单/登录的时候有一个滑动验证码怎么处理?

一般我们会采用自动化浏览器完成这样的抓取,但是效率太低。本篇文章尝试将滑动验证码和抓取的代码进行解耦。

也就是滑动验证码模块只管获取滑动之后的token,而抓取的代码只管抓取。中间通过相关存储介质进行通讯。

背景分析

通过各种尝试发现,某app中阿里云的滑动验证码只是操作行为的验证。

简而言之,就是阿里云只是知道有人滑了验证码,并且此验证码并没有被使用过。

通过分析和尝试,我们完全可以有一个自动化浏览器去滑动生成未使用过的token,然后通过python读取token完成相关抓取。这样相当于有个滑动验证码池,其他的业务需要的话可以直接读取使用。

准备知识

流程分析

  1. 使用puppeteer生成未使用过的滑动验证码,并把相关信息拦截,存起来。
  2. python读取滑动验证码池,完成相关抓取。

效果展示

核心代码

  • puppeteer 通过监听response事件,把response的内容存起来
page.on('response',async response=>
        let url = response.url()
        if (url.indexOf('analyze.jsonp')!==-1)
            let  content = await response.text()
            if(content.indexOf('block')===-1)
                let  file_name = "slide/"+process.pid +Date.now()+".txt"

                 fs.writeFile(file_name,content+url,encoding:'utf-8',mode:'0666',function (err) 
                    console.log(err)
                )

            
        
    )
  • python读取存储的token
    • 滑动验证码的token有3个字段,分别是csessionid,value,t(t的格式是xxx:时间戳:随机数)

后记

写这篇文章是为了解决我在app中遇到阿里云滑动验证码的问题,在群友的提醒下,发现阿里云app端的滑动验证码是个h5。

这样的话,有一个专门的自动化浏览器不断获得验证码,而我之前逆向出来的app接口还能继续使用,也不枉一份辛苦。

以上是关于app中阿里云滑动验证码和抓取代码解耦的一些尝试的主要内容,如果未能解决你的问题,请参考以下文章

django图片验证码和滑动验证

关于picgo中阿里云图床的设置

一些APP对用户错误操作的处理

阿里云申请域名及域名配置https

使用canvas实现图片滑动验证

js实现输入手机验证码后点击提交按钮验证手机输入的验证码和发送的验证码是不是一致