最近发现的一个爬虫练习网站,尝试着做了几道题,发现覆盖面很大,因此来记录分享一下自己的解题思路。
http://glidedsky.com/

JS加密

目标网址
打开开发者工具观察网络请求相应,发现该页面调用get方法传入参数得到的相应正是我们要获取的数据内容。

观察传参,发现三个参数:page,t,sign。page参数是请求的页数,t参数推测是一个时间戳,sign参数应该是加密后的参数,也就是本次的重头戏。


尝试在全局搜索了下t参数的值,但是有用的信息,直接搜索"sign"这个参数的英文名,
(这里可能需要开启反混淆设置,点击右上角的齿轮——勾选在匿名和脚本内容中搜索)
在列表中找到了疑似加密的函数,发现p,t,sign的获取方式都在这里了。

因为sign的加密涉及到了t参数,所以我们先观察t参数,
let t = Math.floor(($(‘main .container’).attr(‘t’) - 99) / 99);
$(‘main .container’).attr(‘t’)这个意思是从html页面container节点获取属性为t的值,尝试搜索下果然找到了这个t值。可以发现如果仅仅只有page一个参数的网页,不会携带有数据。

对我们要求的t值有两个方法:一是直接用execjs模拟js实现,二是使用python实现js的方法,这里我采用的是第一种方法,新建一个js文件,把这段代码写为一个函数,最后调用就能得到我们要求的t值。

//t.js
function get_t(t){t= Math.floor((t - 99) / 99);return t
}

对于sign参数的处理,
let sign = sha1(‘Xr0Z-javascript-obfuscation-1’ + t);
因为在复制它的js代码时会出现多层函数调用,而他这里的调用sha1函数只要不是自定义的加密函数的话,我们可以使用python中hashlib库来实现。经过对比发现,sha1函数正是安全哈希算法。

思路如下:
1.构造只带有page的请求,得到网页内容后,采用正则匹配到t的值,通过execjs调用获得加密后的t值
2.构造sign字符串,调用hashlib库函数实现加密
3.构造请求参数列表,发起请求得到数据。

实现代码

def crawler_javascript_obfuscation_1():global sumsession=login()for i in range(1,1001):url='http://www.glidedsky.com/level/web/crawler-javascript-obfuscation-1?page={}'.format(i)print(url)req=session.get(url=url,headers=heads).text#第一次请求只带page参数gz=re.compile('<div class="container" .*? t="(.*?)">',re.S)t=gz.search(req).group(1)#正则匹配网页的twith open('t.js','r') as f:js=f.read()ctx=execjs.compile(js)t=str(ctx.call('get_t',t))#调用t.js中get_t函数    sha1 = hashlib.sha1()data ="Xr0Z-javascript-obfuscation-1"+t#构造参数sha1.update(data.encode('utf-8'))sign = sha1.hexdigest()data={"page": i,"t": t,"sign": sign,}url='http://www.glidedsky.com/api/level/web/crawler-javascript-obfuscation-1/items'req=session.get(url=url,params=data).textreq=json.loads(req)print( req['items'])for num in req['items']:sum+=num

输出如下

glided_sky 镀金的天空 爬虫闯关 js加密1相关推荐

  1. glided_sky 镀金的天空 爬虫闯关1-2 4-5 解题思路加代码

    最近发现的一个爬虫练习网站,尝试着做了几道题,发现覆盖面很大,因此来记录分享一下自己的解题思路. http://glidedsky.com/ 第一题和第二题 两道问题都是相似的问题,区别在于一个数据加 ...

  2. 黑板课爬虫闯关第一关

    之前也没有系统的学习过python,看其他源码的时候也是似懂非懂的看着理解意思.最近比较有空,就想更系统的学习一下,在知乎上看到大神推荐了一个Python爬虫闯关网站,便想试试. 下面是第一关的介绍, ...

  3. Python 爬虫闯关

    (个人经验,仅供参考,错误之处,敬请谅解) 前言 学到python的爬虫,有个链接是黑板课闯爬虫关的,于是去试了下     第一关     第二关     第三关:链接以此类推,不过有个防护,登陆之后 ...

  4. Python爬虫入门教程 87-100 glidedsky网站爬虫解析,爬虫闯关第一篇

    写在前面 最近查阅github的时候,发现一个网站http://glidedsky.com/,竟然是一个爬虫练习的网站,作为一个爬虫爱好者,还是有必要挑战一下的,而且看了一下网站的定位,感觉非常棒. ...

  5. python闯关游戏_Python爬虫闯关游戏(第三关)

    打开网址,发现需要先注册: 注册一下登陆: 发现和第二关一样,这一关是加了一个登陆,下面开始闯关: import requests from bs4 import BeautifulSoup def ...

  6. Python学习笔记--Python 爬虫入门 -17-5 js 加密 (和有道词典的瓜葛)

    - js加密     - 有的反爬虫策略采用js对需要传输的数据进行加密处理(通常是取md5值)     - 经过加密,传输的就是密文,但是     - 加密函数或者过程一定是在浏览器完成,也就是一定 ...

  7. python爬虫js逆向加密,Web爬虫处理参数js加密、js混淆、js逆向

    中国空气质量在线监测平台(https://www.aqistudy.cn/html/city_detail.html)在众多的练习中,关闭了前台数据信息的展示,也就是说现在网页是这样的: 但我们主要学 ...

  8. python爬虫之基于JS加密破解--有道翻译/百度翻译

    有道翻译破解案例(post) 目标 破解有道翻译接口,抓取翻译结果 # 结果展示 请输入要翻译的词语: elephant 翻译结果: 大象 ************************** 请输入 ...

  9. 一个爬虫练习游戏:黑板课爬虫闯关

    网址:http://www.heibanke.com/lesson/crawler_ex00/ 大概用了一小天的时间吧,把这五关给过了,还挺好玩的.推荐小白玩玩.直接po代码了. 我装pytesset ...

最新文章

  1. criscriter英语测试软件,English test (英语测验)
  2. IKE phase 2
  3. USACO network of school 强连通分量
  4. MFC 单文档的全局变量
  5. 初次面试Java岗位,这些技巧你要知道!
  6. 文件管理、命令别名和glob
  7. 2011年Android手机用户购买行为研究报告
  8. Apollo进阶课程⑳丨Apollo感知之旅——机器学习与感知的未来
  9. 统计内存使用率shell
  10. SQL Server 2008 R2下载地址
  11. python怎么读取csv文件-Python如何读取csv文件
  12. 洛谷 P2181 对角线
  13. python加颜色_python输出带颜色字体实例方法
  14. python3 opencv_python3 opencv3 实现基本的人脸检测、识别功能
  15. 一段时间即可做一些事情,如二十分钟
  16. wifi协议-802
  17. 华为交换机重置Console口密码
  18. 【Zeekr_Tech】TARA攻击树分析方法论
  19. cad画直线长度与实际不符_cad测量直线长度(CAD测量长度与实际画线长度不符)...
  20. 【DC综合】逻辑综合的实施流程

热门文章

  1. 科学的特性与中医理论的基础 作者:奥卡姆剃刀
  2. sql server任何版本安装新实例
  3. windows桌面程序: 俄罗斯方块 C++
  4. OC底层消息转发机制
  5. R语言韦布尔(Weibull)分布
  6. ip地址区间的正则校验
  7. JavaScript获取时间方法与输出格式
  8. 时间转毫秒 /毫秒格式化转/ LocalDateTime
  9. 21.ACL 访问控制权限详解,setfacl,getfacl,setfacl -m,setfacl -d,setfacl -k,setfacl -x,mask等实操详解
  10. sqlserver跨服务器连接数据库