前言大家好,这次我们来聊一聊爬虫方向的一个知识,Python是如何执行js的,快来看看吧!!!为什么要引入Python?js实现的问题?都说技术行业有专攻,每种语言都有自己的长处和短处。在爬虫的方向上,Python绝对是老大。近年来,随着AI的普及,需要各种数据,因此对爬虫的需求也越来越大。当然,我们做爬虫是因为它擅长爬行,但估计后台的人都在骂街。毕竟谁也不希望自己的数据被夺走,所以后台的反爬虫技术也在飞速提升,攻防也就这样了。现在为了防止反爬,前端使用的反爬技术多是js代码混淆。什么是js代码混淆?正常的代码,我们来看一段js代码。代码的逻辑很简单,就是返回拼接时间。functionformatDate(now){varnow=newDate(1230999938);varyear=now.getFullYear();varmonth=now.getMonth()+1;vardate=now.getDate();varhour=now.getHours();varminute=now。getMinutes();varsecond=now.getSeconds();returnyear+"-"+month+"-"+date+""+hour+":"+minute+":"+second;}运行这段代码,如下图所示。混淆代码我刚刚找到了一个在线js代码混淆网站。js代码函数formatDate(mz1){varKkkGDiH2=newwindow["\x44\x61\x74\x65"](1230999938);vartsk3=KkkGDiH2['\x67\x65\x74\x46\x75\x6c\x6c\x59\x65\x61\x72']();varYMreyP4=KkkGDiH2['\x67\x65\x74\x4d\x6f\x6e\x74\x68']()+1;varOzo5=KkkGDiH2['\x67\x65\x74\x44\x61\x74\x65']();varQMYEc$eD6=KkkGDiH2['\x67\x65\x74\x48\x6f\x75\x72\x73']();varJfXVV_Akq7=KkkGDiH2['\x67\x65\x74\x4d\x69\x6e\x75\x74\x65\x73']();var$mP8=KkkGDiH2['\x67\x65\x74\x53\x65\x63\x6f\x6e\x64\x73']();returntsk3+"\x2d"+YMreyP4+"\x2d"+Ozo5+""+QMYEc$eD6+"\x3a"+JfXVV_Akq7+"\x3a"+$mP8以上真不是我写的。混淆之后是这个样子的,不信看图。可能我们会有疑问,js代码变成了这个东西,还能执行吗?答案是肯定的。虽然js代码很乱,但是还是可以执行,结果和上面一样。这就产生了一个问题。我们在做爬虫的时候,如果有必要,我们可能或多或少要研究一下js代码,然后再对js进行解密。但是,但是,代码这么乱,怎么解决呢?我根本无法理解任何逻辑。基本上不能用python按照js逻辑改写。。。巧了,编辑器也卡在这里了。。。后来想了想,要是Python能执行js代码就好了,不用管逻辑在函数内部,只取函数的返回值。Python第三方包Execjs可能就是。我不是唯一遇到过这种情况的人,所以大佬们开发了这个工具包来执行js代码。安装前需要有node环境,这里就不举栗子了,下一步就好了。pip3installPyExecJSExecjs的使用超级简单,几行代码就可以了。执行js注意:由于上面的js代码会生成一个window对象,所以不能直接执行,需要额外辅助。这里有一些其他的例子。普通js代码functionadd(x,y){returnx+y;}Python执行js代码importexecjsctx=execjs.compile("""functionadd(x,y){returnx+y;}""")print(ctx.call("add",1,2))执行结果如下图:混淆js代码functionadd(bi1,Pl$2){returnbi1+Pl$2}Python执行混淆js代码importexecjsctx=execjs.compile("""functionadd(bi1,Pl$2){returnbi1+Pl$2}""")print(ctx.call("add",1,2))执行结果如下图所示:可以看到即使再次混淆,只要执行js代码,就万事大吉了。上面拼接时间返回的js混淆代码也可以执行,但是多了一个window对象,需要node安装jsdom。由于网络设置的问题,确实无法下载示例。真的对不起。或者用selenium打开浏览器执行然后返回,当然速度比较慢。最后,反爬和爬一直是一攻一防。未来这种情况可能会更加严重,但是在庞大的Python生态系统中总能找到好的解决方案。人生苦短,Python就是这首歌。
