点击“Python编程与实战”,选择“置顶公众号”
python
第一时间获取 Python 技术干货!web
考虑这样一个场景,当你在app端提交订单/登陆的时候有一个滑动验证码怎么处理?chrome
通常咱们会采用自动化浏览器完成这样的抓取,可是效率过低。本篇文章尝试将滑动验证码和抓取的代码进行解耦。编程
也就是滑动验证码模块只管获取滑动以后的token,而抓取的代码只管抓取。中间经过相关存储介质进行通信。json
背景分析
经过各类尝试发现,某app中阿里云的滑动验证码只是操做行为的验证。浏览器
简而言之,就是阿里云只是知道有人滑了验证码,而且此验证码并无被使用过。微信
经过分析和尝试,咱们彻底能够有一个自动化浏览器去滑动生成未使用过的token,而后经过python读取token完成相关抓取。session
这样至关于有个滑动验证码池,其余的业务须要的话能够直接读取使用。app
准备知识
puppeteer破解阿里h5滑动验证码async
chrome远程调试webview(https://developers.google.cn/web/tools/chrome-devtools/remote-debugging/webviews?hl=zh-cn)
流程分析
使用puppeteer生成未使用过的滑动验证码,并把相关信息拦截,存起来。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接口还能继续使用,也不枉一份辛苦。
做者:阳光下的小树
https://me.csdn.net/u013356254
推荐阅读
THANKS
- End -
本文分享自微信公众号 - Python编程与实战(GoPy1024)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。