猿人学12题超详细解题思路-入门级js(base64编码)
前言:服务器为了防止获取他们的数据,可谓是使用各种方法,js逆向可以很方便的解析出来一些加密数据,毕竟道高一尺魔高一丈,今天告诉大家袁人学第12题的解题思路,超详细解题思路。
需求:
抓取这5页的数字,计算加和并提交结果
这个跟之前的cookie反扒的需求一样,需要看的可以去猿人学13题解析去查看,这题跟之前13题差别就在于一个是cookie反爬,一个是js反爬,接下来开始解题:
1.分析过程
老规矩打开我们的f12开发人员调试工具,点击第一页的按钮进行抓包可以看到cookie中我们只需要知道一个sessionid,再看请求数据:
刚进来就看到了这个请求url后面的m参数好复杂,应该是加密过的,请求头里没什么可疑数据,看来我们接下来就需要分析这个m参数是怎么来的了。
首先猜测,可能是通过加密得来的,常见的加密有base64和md5,md5加密的话没有这么短,那极有可能是base64加密得来的,加密的话需要运行js代码,我们全局搜索一下这个m变量
这种单字符变量直接搜索果然不现实,太多结果了没法找,我们换种思路,寻找一个跟m在一起的参数page试试
三个js文件里有,大大缩减了我们的寻找范围,点开第一个文件看看附近没有m不太像,点开第二个js文件
基本确定就是这个了。看代码段window.page是一个数值表示的第几页,btoa函数经过查询是前端进行bs4编码的一个函数,我们使用工具进行编码对比一下
与m的值一模一样,分析成立,开始代码实现
2.上代码
sessionid怎么获取不知道的看下我猿人学13题解题思路
我们需要使用两个库:
base64:进行base64编码
requests.session:与服务器保持长连接
jsonpath:便于我们对得到的js数据进行提取
# base64:进行base64编码
# requests.session:与服务器保持长连接
# jsonpath:便于我们对得到的js数据进行提取
import base64
import random
import timefrom requests import session
import jsonpaths = session()
# 按要求配置请求头
s.headers = {'user-agent': 'yuanrenxue.project','cookie': 'Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1638275262,1638277492,1638438036,1638533253; qpfccr=true; no-alert3=true; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1638258714,1638277499,1638438048,1638533272; tk=8212031715942172672; sessionid=mfx6hizw715qqtxunf7wd722iauclwvu; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1638533293; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1638533300'
}
# 循环爬取五页的数据
num = 0 # 数字总和
for i in range(5):# 这里需要注意的是b64encode需要传入一个字节类型的数据,所以需要先把字符串转换成字节,转换过后在转换回字符串m = base64.b64encode(('yuanrenxue' + str(i + 1)).encode()).decode()# 获取json数据json_data = s.get(f'https://match.yuanrenxue.com/api/match/12?page={i+1}&m={m}').json()# 提取每一个数字num_list = jsonpath.jsonpath(json_data, '$..value')# 遍历求和for j in num_list:print(j, end='\t')num += j# 添加休眠时间避免反爬(可有可无)time.sleep(random.randint(0, 3))print()
print('num:', num)
成功得到数据需要注意的是在使用base64编码时候需要把字符串转换成字节类型,进行base64编码过后再转换回字符串,我就因为这个耽误了一点时间
大功告成,解散
猿人学12题超详细解题思路-入门级js(base64编码)相关推荐
- 【Day24】 LeetCode算法题 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]
刷题打卡,第 二十四 天 题目一.43. 字符串相乘 题目二.1800. 最大升序子数组和 题目一.43. 字符串相乘 原题链接:43. 字符串相乘 题目描述: 给定两个以字符串形式表示的非负整数 n ...
- 剑指offer第二版答案详细版(带详细解题思路)
1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...
- OpenJudge NOI 1.5 编程基础之循环控制(21-30题)C++ 解题思路
续上一篇文章OpenJudge NOI 1.5编程基础之循环控制(11-20题) C++ 解题思路_Leleprogrammer的博客-CSDN博客续上一篇文章.https://blog.csdn.n ...
- 阿里聚安全攻防挑战赛第三题Android PwnMe解题思路
阿里聚安全攻防挑战赛第三题Android PwnMe解题思路 大家在聚安全挑战赛正式赛第三题中,遇到android app 远程控制的题目.我们今天带你一探究竟,如何攻破这道题目. 一.题目 购物应用 ...
- 2020年11月份某kh比赛部分CTF赛题求大佬解题思路
2020年11月份某kh比赛部分CTF赛题求大佬解题思路 只down下来misc和密码两类题 麻烦大佬们搞一搞这四道题 只down下来misc和密码两类题 百度网盘赛题分享 链接: https://p ...
- OpenJudge NOI 1.5编程基础之循环控制(31-40题)C++ 解题思路
续上一篇文章.OpenJudge NOI 1.5 编程基础之循环控制(21-30题)C++ 解题思路_Leleprogrammer的博客-CSDN博客续上一篇文章OpenJudge NOI 1.5编程 ...
- 华为OD机试真题 Java 实现【二维伞的雨滴效应】【2023 B卷 100分】,附详细解题思路
目录 一.题目描述 二.输入描述 三.输出描述 四.解题思路 五.Java算法源码 六.效果展示 1.输入 2.输出 3.说明 大家好,我是哪吒. 做技术,我是认真的,立志于打造最权威的华为OD机试真 ...
- 华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
一.题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏. 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格,然后获得一次选房子的机会,直到所有房子都被选完,房子最多的人获胜. 跳房子的过程 ...
- 2023年认证杯C题超详细思路配有实现代码
2023年认证杯初步解题思路 后续会更新思路对应的实现代码 问题一思路 数据预处理:首先,根据描述,你已经有了心电波形的功率谱密度数据.你可以将频率范围从0 Hz到180 Hz分成361个频率间隔为0 ...
最新文章
- iOS GCD_1
- bizmsg是什么文件可以删除吗_电脑C盘满了怎么清理?哪些文件可以删除?
- 游戏领域Serverless架构探索之路
- 针对.NET开发者(neo-charm) 1.0 的NEO区块链架构参考模型
- 大数据(9) - Flume的安装与使用
- 浮点型的三个特殊值 Double.NEGATIVE_INFINITY Double.POSITIVE_INFINITY Double.NaN
- python数据结构实验目的_图的基本操作实现(数据结构实验)
- Redis实现分布式锁2
- Java 25天基础-DAY 05-面向对象-构造函数
- C/C++中使用可变参数
- like语句太慢 sqlserver_SQLSERVER查询速度慢的原因收集以及优化建议
- 拼音模糊搜索 php,精确搜索加拼音搜索加模糊搜索
- 浙大2016计算机考研分数线,2016浙江大学考研分数线公布
- 微信公众号支付JSAPI
- 【OS笔记 4】操作系统的组织结构(层次结构、微内核结构)虚拟机的概念
- Android 获取经纬度处理
- [18调剂]中国科学院深圳先进技术研究院“视频信号处理”课题组招聘
- 风险管理可分为哪两类?具体方法是什么?
- Jenkins镜像加速(清华大学镜像)
- 计算机一级必考知识点,计算机一级考试基础知识点汇总.doc