• 本站域名:OceanCoder.cn 若您喜欢本站,请添加至收藏夹!
  • 网站少部分资源来源自网络,如有侵犯您的权益,请联系站长删除!
  • 本站所有文章,除特殊标明外,皆为本人原创,转载请注明出处,谢谢合作!
  • 本站所下载的资源,若无特殊说明,使用统一解压密码:oceancoder.cn
  • 本站已实现布局自适应,支持手机端、pad端访问,欢迎体验
  • 本站部分资源可通过微信公众号留言获取,欢迎体验

关于某网赚网盘通过js加密cookie从而限制抓取网页源码的解决办法

HTML+CSS+JS OceanCoder 2019-06-02 3435 次浏览 0个评论

有网友反馈说西部网盘不能解析了,确认了一下,该网盘现在限制抓取网页了,该网站目前访问不稳定,看情况,争取下个版本修复。

本来想拿西部网盘来写的,可是这个网盘打不开了,还是先拿彩虹云说说吧,都一样。

这篇文章不是教程,所以有些内容会忽略掉


0、前言

不管是网盘解析还是各种的网络爬虫,都是先取得网页源码然后从中取出自己感兴趣的内容的。但这无疑损害了某些网站的利益,于是就会有各种手段来限制非客户端的用户抓取网页,本文说的js加密cookie就是其中一种。


1、先看看直接抓取的页面源码是什么样的

<script>var x="hantom@@JgSe0upZ@@Path@02@GMT@f@@Sun@captcha@if@@@href@callP@@g@try@substr@DOMContentLoaded@as@@@Expires@@chars@@onreadystate
change@__jsl_clearance@new@0xFF@search@34@@window@@while@document@36@@@false@split@19@innerHTML@e@3D@8@function@location@setTimeout@attachEvent
@d@var@@0xEDB88320@length@2B@yF@addEventListener@@@charCodeAt@createElement@toLowerCase@@String@@cookie@1500@14@join@@@@__p@charAt@return@path
name@1559453654@Array@eval@@4@Jun@0@@catch@TmT2@@replace@@fromCharCode@@else@firstChild@@a@@FcG@oP@match@@WU@div@@reverse@challenge@06@toS
tring@RegExp@Oo4BUv@for@rOm9XFMtA3QKV7nYsPGT4lifyWwkq5vcjH2IdxUoCbhERLaz81DNB6@@@@https@1@2@@@@parseInt@FB@@932".replace(/@*$/,"").split("@"),
y="2b 39=26(){28('27.f=27.3e+27.1b.44(/[\\?|&]b-4l/,\\'\\')',35);1h.34='18=3f.5i|3l|'+(26(){2b e=[26(39){3d 39},26(e){3d e},
26(39){54(2b e=3l;e<39.2e;e++){39[e]=5f(39[e]).51(1i)};3d 39.37('')}],39=[[-~{}]+(-~[-~-~{}]+[]),
((((+!1e['g'+'1'])<<(+!1e['g'+'1'])))*[((+!1e['g'+'1'])<<(+!1e['g'+'1']))]+[[]][3l]),[-~{}]+[(+!!1e['3b'+'1'+'10'])],
[-~{}-~{}+3j],(-~-~{}+[]),(-~[-~-~{}]+[]),(-~[-~~~![]+((+!1e['g'+'1'])<<(+!1e['g'+'1']))-~~~![]+((+!1e['g'+'1'])<<(+!
1e['g'+'1']))]+[]+[]),[-~{}]+[-~{}],((-~{}+[~~[]])/[-~-~{}]+[]+[]),[-~{}]+(-~-~{}+[]),[(+!!1e['3b'+'1'+'10'])],[-~{}],
((((+!1e['g'+'1'])<<(+!1e['g'+'1'])))*[3j]+[]+[]),([(-~!{}+[((+!1e['g'+'1'])<<(+!1e['g'+'1']))]>>((+!1e['g'+'1'])<<(+!
1e['g'+'1'])))]*((-~!{}+[((+!1e['g'+'1'])<<(+!1e['g'+'1']))]>>((+!1e['g'+'1'])<<(+!1e['g'+'1']))))+[[]][3l])];
54(2b 4=3l;4<39.2e;4++){39[4]=e[[3l,5a,5b,5a,3l,5a,5b,5a,3l,5a,3l,5a,3l,5a][4]]([(-~-~{}+[]),'4d',
(-~-~{}+[]),'5g','4e',(-~-~{}+[]),'42%2f%',[(-~-~{}+[])+[(+!!1e['3b'+'1'+'10'])]],[[-~-~{}]/(+!!1e['3b'+'1'+'10'])+[]+[]][3l].3c((+[])),
'4h%24',[(-~-~{}+[])+[-~{}]],'2g','53%',[{}+[]+[]][3l].3c((((+!1e['g'+'1'])<<(+!1e['g'+'1'])))*[3j])][39[4]])};3d 39.37('')})()+';
13=a, 6-3k-21 50:1c:36 7;5=/;'};c((26(){j{3d !!1e.2h;}41(23){3d 1l;}})()){1h.2h('l',39,1l)}48{1h.29('17',39)}",
f=function(x,y){var a=0,b=0,c=0;x=x.split("");y=y||99;while((a=x.shift())&&(b=a.charCodeAt(0)-77.5))
c=(Math.abs(b)<13?(b+48.5):parseInt(a,36))+y*c;return c},z=f(y.match(/\w/g).sort(function(x,y)
{return f(x)-f(y)}).pop());while(z++)try{eval(y.replace(/\b\w+\b/g, function(y){return x[f(y,z)-1]||("_"+y)}));break}catch(_){}
</script>

就是上面这些代码,它的作用是啥,直接看是肯定看不出来的,因为是加密过的。

上述代码要想执行,离不开eval这个函数。这里说个技巧,可以将上述的eval替换为return或者console.log之类的函数将相关内容打印出来,就可以看出上述代码具体功能了。


2、我懒得改,直接说结果:上述代码是在你的浏览器生成一条cookie,当网页访问时,会先检查cookie是否存在,若不存在,则代表你不是通过浏览器打开的网页,你就会继续取得上述代码,存在则正常返回结果。这也是为什么各位直接通过浏览器打开网页时可以正常访问,但是却取不到网页源码的原因!

image.png

上图框出的代码即为js动态生成的,该条cookie的__jsl_clearance可以从上述的js代码中找到!


3、这种情况怎么解决?

既然明白是怎么回事,问题就容易解决了。

思路:既然取网页源码需要这条cookie,那么我们就自己构造这条cookie,然后带着cookie去获取源码就可以了。


4、问题的关键是怎么构造这条cookie?

一般这类问题的处理方法是:

(1)修改抓取到的js代码(主要是替换eval函数为return,此处不详细描述),让这段代码不执行eval,而是通过后台执行,返回解密后的代码片段

(2)后台再次执行解密后的js代码,得到cookie

(3)携带此cookie去获取网页源码


彩虹云网盘就是因为经常更改cookie的加密方式,导致早期版本的《网赚网盘下载辅助工具》经常解析失败的。现在西部网盘貌似也要来这一套了,不过问题不大!


已有 3435 位网友参与,快来吐槽:

发表评论