Python利用PyExecJS库执行JS函数

  在Web渗透流程的暴力登录场景和爬虫抓取场景中,经常会遇到一些登录表单用DES之类的加密方式来加密参数,也就是说,你不搞定这些前端加密,你的编写的脚本是不可能Login成功的。针对这个问题,现在有三种解决方式:

  • ①看懂前端的加密流程,然后用脚本编写这些方法(或者找开源的源码),模拟这个加密的流程。缺点是:不懂JS的话,看懂的成本就比较高了;
  • ②selenium + Chrome Headless。缺点是:因为是模拟点击,所以效率相对①、③低一些;
  • ③使用语言调用JS引擎来执行JS函数。缺点是:每个JS引擎执行的效果会不一致,导致一些小偏差;

  第③种方式中,Python语言能利用的库有PyExecJS、PyV8、Js2Py三种,PyV8使用就报错(我暂时没解决),Js2Py相当于将JS翻译成Pyhton,Js2Py对于复杂JS而言非常容易出错。所以本文主要讨论通过Python语言的PyExecJS库(切换不同的JS引擎)来执行JS函数的过程。

不同浏览器内核版本对URL编码处理也不同[冷知识]

  当Html的表单被提交时,每个表单的参数都会被Url编码之后才能被发送。由于历史的原因,表单使用的Url编码实现并不符合最新的标准。例如对于空格使用的编码并不是%20,而是+号,如果表单使用的是Post方法提交的,我们可以在HTTP头中看到有一个Content-Type的header,值为application/x-www-form-urlencoded。大部分应用程序均能处理这种非标准实现的Url编码,但是在客户端Javascript中,并没有一个函数能够将+号解码成空格,只能自己写转换函数。还有,对于非ASCII字符,使用的编码字符集取决于当前文档使用的字符集。

你可能感兴趣的:(Python利用PyExecJS库执行JS函数)