js如何运⾏python代码_⼿把⼿教你如何使⽤Python执⾏js代码前⾔
各位⼩伙伴,⼤家好,这次咱们来说⼀下关于爬⾍⽅向的⼀个知识,Python如何执⾏js,快来看看吧
为什么要引出Python执⾏js这个问题?
都说术业有专攻,每个语⾔也都有⾃⼰的长处和短处。在爬⾍⽅向,Python绝对是扛把⼦,近⼏年随着AI的⽕爆,需要各种各样的数据,所以,爬⾍需求也跟着⽔涨船⾼起来。
我们做爬⾍的当然是爬的爽,但是估计⼈家后台在骂街,毕竟谁都不希望⾃⼰的数据被弄⾛,所以后台
反爬技术也在快速提升,⼀攻⼀防就这么在拉锯着。
现在为了防⽌反爬,前端使⽤的反爬技术⽐较多的是js代码混淆。
什么是js代码混淆?
正常代码
我们现在看⼀段js代码,代码逻辑很简单,就是拼接时间返回。
functionformatDate(now) {
var now = new Date(1230999938);
var FullYear();python新手代码图案如何保存
var Month()+1;
var Date();
var Hours();
var Minutes();
var Seconds();
returnyear+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
}
运⾏⼀下这段代码,如下图所⽰。
混淆代码
我随便了个在线的js代码混淆⽹站。
js代码
functionformatDate(mz1){var KkkGDiH2=new window["\x44\x61\x74\x65"]
(1230999938);var tsk3=KkkGDiH2['\x67\x65\x74\x46\x75\x6c\x6c\x59\x65\x61\x72']
();var YMreyP4=KkkGDiH2['\x67\x65\x74\x4d\x6f\x6e\x74\x68']
()+1;var Ozo5=KkkGDiH2['\x67\x65\x74\x44\x61\x74\x65']
();var QMYEc$eD6=KkkGDiH2['\x67\x65\x74\x48\x6f\x75\x72\x73']
();var JfXVV_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环境,这⾥就不举栗⼦了,下⼀步下⼀步就好了。
pip3 install PyExecJS
Execjs⽤法超级简单的,⼏⾏代码。
执⾏js
注:由于上述js代码会⽣成window对象,并不能直接执⾏成功,需要额外的其他辅助,这⾥简单的举⼀下其他例⼦。
正常js代码
functionadd(x, y) {
returnx + y;
}
Python执⾏js代码
import execjs
ctx = execjspile("""
functionadd(x, y) {
returnx + y;
}
""")
print(ctx.call("add", 1, 2))
执⾏结果如下图所⽰:
混淆js代码
functionadd(bi1,Pl$2){returnbi1+Pl$2}
Python执⾏混淆js代码
import execjs
ctx = execjspile("""
functionadd(bi1,Pl$2){returnbi1+Pl$2}
""")
print(ctx.call("add", 1, 2))
执⾏结果如下图所⽰:
可以看到,即使再混淆,只要执⾏的是js代码,都是没啥问题的。
上述拼接时间返回的js混淆代码也是可以执⾏的,但是它多了⼀个window对象,需要node安装jsdom才⾏,由于⽹络设置有问题,实在是下载不了举例⼦,实在是抱歉。
或者使⽤selenium打开游览器执⾏再返回也⾏,当然,速度更慢。
结尾
反爬和爬⾍⼀直都是⼀攻⼀防,以后可能这种情况会更严重,但是在Python庞⼤的⽣态中总能到不错的⽅案。⼈⽣苦短,Python当歌。
【编辑推荐】
【责任编辑:华轩 TEL:(010)68476606】
点赞 0

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。