一年一度的女生节又到了,校园里开始各种活动不断,这么青春活力的日子里,怎么能少的了男生的参与呢?
背景
校园app上推出了一年一度的活动——“小幸运”
女孩子们在上面许愿,男孩子们则可以随机查看,然后选择是否去点亮她的愿望
像这样:
看到这里我就心动了,遇到这般美丽的数据,不想办法爬下来然后搞点事情,怎么好意思说自己是个学Python的呢?
smile
准备活动
手机app,用“抓包精灵”抓包很方便,找到对应请求后再上电脑重放进行后续分析
登录过程放后边再讲,先来瞅一瞅“查看愿望”的数据包
get_wish
emmmm..看了一下,貌似简单的过分了,都不用带cookies,直接一个get请求然后就会返回json数据,这里就直接上网页截图了
所以后边加个多线程爬取,顶多再加个续存和数据去重就完事了?
思维发散
好不容易想写个博客,怎么可能这么简单就结束了呢?!
前面已经提到过,愿望查看是随机的,所以男同胞们选择点亮的愿望其实也具有一定的随机性
当然,某种意义上讲,这样会比较浪漫
但是如果就这样结束了,我后边就没啥可写的了啊。。
所以!
我就去分析了下“点亮愿望”的数据包,果不其然,其中有一个wishId的参数,这个参数就对应着前面爬取的愿望id,手机上看不到,所以也没法指定,但是电脑上可以轻松完成这一步骤
于是乎,一个伟大的idea诞生了!
我要把登录接口调到自己的公众号上,让男同胞们,看完了我爬取的“愿望集”之后,想点哪个点哪个!
最终效果图:
真正的开始
说做就做,立马去抓登录请求包,发现登录接口用的是学校另一个网站的,跳转过去再抓包分析
提交的表单数据如下:
???
我输入的用户名密码呢??怎么找不到了??
emmm..RSA??好吧,看样子是给加密了:P
说起来我是个前端渣,这种情况遇的比较少
不过只要是在客户端进行的操作,我们的小爬虫就都能完成!
那就去找找看它的加密过程叭
翻一翻它的js文件
js
就是你了!des.js!
打开来瞅瞅
des_js
???
怎么感觉怪怪的??
上百度一搜,好家伙...原来网上随手复制下来的...
baidu
得,都用不着细细分析了,人家把好几种加密解密方式都写全了一起塞里面了
直接跳到loing3.js里去搜加密函数就行了
strEnc
这里的u,p分别是用户名密码,lt是表单里一个隐藏数据,顺手爬下来就行了
然后在Python调用node.js将相应的数据加密一下就得到了目标参数rsa了
然而这只是登录的第一步...
说起来就觉得坑,到后面整个脚本写完了我才整明白它这个登录流程——
先是从活动官网跳到学校学生网站去登录,这里的登录就是上面分析的过程,登陆成功后返回一个学生信息的json数据,再跳转回活动网站将整个用户信息的json数据作为参数提交..
至此把整个登录过程写成了脚本形式
后面“选择愿望”的时候,只需要post对应的网址再加上一个wishId就好了
后续工作
最后就是要将公众号与脚本对接了
公众号平时没怎么用,就挂了一个聊天机器人
趁这次活动,把整个答复流程重写了下
由于访问量增大,就把先前机器人的接口给关闭了
按照一定格式输入用户名密码和愿望id就能成功点亮她的愿望了!
回复“#小幸运”就能获取“愿望集”哦!
结语
最后我想吐槽一下学校网站的加密手段。。。
js文件是网上随手复制的还算凑合,但是原文件中还包含解密方式是什么鬼。。
然后用的是DES加密,该网站平时学生访问量并不大,有空还是改成RSA加密叭
哦对了,完整的代码已上传到Github:慕风的Gayhub
网友评论