一. 什么是JS加密?

①加密JS:对JS源码进行加密

<script type="text/javascript">
	window.onload=function(){
	var _$cP=document.getElementById(_$xg('KkA6KOpFiYE'));
	_$eM(_$cP.name,_$n0(_$cP,_$tq('eavul')));
};
</script>

   JS是运行在浏览器里面的语言,也就是我们所理解的前端语言。JS可以对一些前端参数进行加密,以便服务器后台便于验证。如对用户名和密码进行加密,后端可以判断是否是正确的请求还是恶意的攻击。加密可以是一种常见的算法,如MD5等方法,如果前端浏览器可以看到未经加密的JS,那么模仿其加密过程或者逆向解密也是不难的。所以,此时的JS加密之后就可以预防这些了。


二. 爬虫里面的JS加密?


   为了防止别人爬取网站里面的内容,使用JS加密cookie就可以区别你是浏览器正确的请求还是使用诸如Httpclient等框架在爬取网页内容了,毕竟现在的普通的爬虫框架只是负责拿着你给的URL传递一些参数获取网页源码的工具,它们不能运行JS,也就无法对服务器需要验证的参数进行加密,从而导致服务器会拒绝你的请求,给你返回一个不是你所期望的网页内容的页面。

JSEncrypt加密 ios中相应慢 js加密有什么用_selenium

三. 如何解决加密JS?

 尽管凭借肉眼的静态分析是看不出JS的加密流程的,不过借助浏览器的JS动态调试我们也可以选择尝试还原加密的方法,只不过这种方法就比较耗费时间了。(PS:如果方法当中存在自定义的加密算法,而不是常见的诸如DES,MD5等算法,我觉得还原的难度就太难了)

 如果你不想慢慢分析加密流程,也可以使用现有的JS执行框架。上面只是普通的爬虫框架不能解决的问题,但是既然有盾,那么也就会有矛的。下面介绍几款比较好用的矛。(java甚至本身也可以执行JS,但是是完全脱离浏览器环境的执行,如执行的JS代码中含有浏览器的对象如window,cookie等就不行了)

①.Selenium:该框架可以基于真实的浏览器测试框架,可以运行JS。该框架会打开我们本地的谷歌或者火狐等浏览器进行操作,所以可以说这是一个自动化的测试框架,但是作为爬虫却是较慢了。毕竟你要是开几十个谷歌浏览器窗口去获取网页源码怕是有点慢。加密的JS只是起到了混淆的作用,浏览器可以运行,那么该框架也可以运行这些被加密过的JS从而得到你所需要的参数。现在以为很多爬虫基于Selenium,导致检测Selenium框架的方法也越来越多,当你启动Selenium无头模式的时候,chrome浏览器会设置一些属性表明这是一个无头的测试浏览器,使得网页的前端就可以判断你这是一个无头的爬虫浏览器,并且无头的模式插件(不论官方还是自定义的)也是无法加载的。
  有头的模式就和我们平时使用浏览器浏览网页是一样的,这些网站便不能检测出来,但是因为服务器没有显卡运行有头的模式会报错,所以对待一些严格防止爬虫的网站只能采取在有显卡的windows或者linux上爬取了。
  ②.PhantomJS:这是一个没有页面的浏览器内核,它可以像真实的浏览器一样进行网页的一些操作,只是没有界面。